Passer au contenu du pied de page
Iron Academy Logo
Application C#
Application C#

Autres catégories

Tutoriel sur la logique de tournoi C# WinForms — Analyse complète de la Leçon 18 (Tim Corey)

Tim Corey
1h 15m 39s

Dans la leçon 18 de la série C# Application de Tim Corey du début à la fin, l'accent est fortement mis sur le développement axé sur la logique à l'intérieur d'une application C# WinForms (Windows Forms). Contrairement aux leçons précédentes qui mettaient en avant l'interface utilisateur, les contrôles WinForms et la mise en page visuelle à l'aide du concepteur, cette leçon porte sur la construction d'un système qui fonctionne correctement en arrière-plan.

Tim explique à plusieurs reprises que c'est là où les efforts de développement réels se produisent. Les boutons, les champs de texte et les contrôles courants sont faciles comparés à la conception d'une logique qui doit fonctionner pour chaque scénario possible. Cette leçon représente un point tournant où l'application commence à ressembler à une vraie application de bureau Windows, pas seulement à une démo.

Toute la leçon est enseignée en utilisant Visual Studio, tirant parti du .NET Framework, d'une bibliothèque de classes et d'un type de projet WinForms qui prend en charge la croissance future.

S'éloigner de l'interface utilisateur pour concevoir la logique

Au début de la leçon, Tim fait un point important : ne commencez pas à coder immédiatement. Il explique que la logique complexe ne devrait jamais commencer dans le fichier de code de fond d'un formulaire. Au lieu de cela, il met en pause l'application Windows Forms, prend un stylo et du papier, et commence à concevoir visuellement la structure du tournoi.

C'est un détournement délibéré du concepteur, de la boîte à outils et de la grille de propriétés. Tim souligne que même si WinForms offre une suite complète d'outils UI, la logique ne peut pas être glissée ou déposée - elle doit être conçue.

Il mentionne qu'il a déjà réécrit cette logique plusieurs fois, renforçant le fait que corriger des bogues et repenser des approches est une partie normale du développement.

Comprendre la structure du tournoi conceptuellement

Tim explique ce qu'est réellement un tournoi d'un point de vue de la conception du système. Il définit :

  • Équipes

  • Affrontements

  • Inscription aux affrontements

  • Rounds

  • Exemptions

Chaque affrontement contient des inscriptions d'affrontement, et chaque inscription peut ou non encore savoir quelle équipe elle représente. Cette idée devient cruciale plus tard lors de l'implémentation des futures rondes.

Tim utilise un exemple simple avec trois équipes pour montrer pourquoi les tournois nécessitent des puissances de deux. À cause de cela, les exemptions ne sont pas une fonctionnalité spéciale - elles sont une nécessité mathématique.

Cette section concerne moins le code et plus le fait de penser comme un développeur, quelque chose que Tim souligne à plusieurs reprises tout au long de la série.

Pourquoi certaines équipes doivent être nulles

À ce stade, Tim passe à Visual Studio, ouvre l'Explorateur de solutions et navigue dans le projet de base de données. Il double-clique dans le design de la table et explique une exigence subtile mais critique : les rondes futures ne peuvent pas encore connaître les équipes.

À cause de cela, le champ TeamCompetingId doit permettre des valeurs nulles.

Tim ouvre la fenêtre de propriétés, explique l'avertissement de sécurité de SQL Server et montre comment désactiver temporairement Empêcher l'enregistrement des modifications qui nécessitent la recréation de la table. Il prend soin de noter que cela n'est sûr que parce que la table est vide.

C'est un exemple classique de l'équilibre entre la vitesse de développement, l'intégrité des données et les contraintes du monde réel.

Garder les formulaires propres et concentrés

En revenant au projet WinForms, Tim renforce une règle qu'il suit depuis le début du cours :\ Les formulaires ne doivent pas contenir de logique métier.

Bien que WinForms rende facile l'écriture de logique directement à l'intérieur des événements de clic sur des boutons, Tim explique que cela nuit à :

  • La maintenabilité

  • La réutilisabilité

  • Le test

  • La compatibilité future avec la plateforme

Au lieu de cela, la responsabilité du formulaire est limitée à :

  • Collecter les entrées de l'UI

  • Appeler des méthodes

  • Afficher les résultats

Cette séparation garde l'application de bureau Windows propre et professionnelle.

Créer la classe TournamentLogic

Tim crée une nouvelle bibliothèque de classes et introduit une classe TournamentLogic statique. Cette classe n'est ni une UI, ni un accès aux données, ni un modèle - elle existe uniquement pour la logique d'implémentation.

Il explique que ce choix de conception permet de réutiliser plus tard la même logique dans :

  • WPF

  • ASP.NET

  • D'autres plateformes de bureau .NET ou web

Ce moment démontre tranquillement pourquoi WinForms est toujours pertinent : lorsqu'il est utilisé correctement, il s'intègre proprement avec l'architecture moderne.

Randomiser équitablement les équipes

Tim implémente une méthode pour randomiser l'ordre des équipes en utilisant :

OrderBy(x => Guid.NewGuid())

Il reconnaît que ce n'est pas parfaitement cryptographique, mais explique qu'il est :

  • Simple

  • Lisible

  • Pris en charge

  • Facile à remplacer plus tard

Cela s'aligne avec un thème récurrent de la leçon : atteindre la justesse d'abord, optimiser plus tard.

Il explique également pourquoi la liste originale n'est pas modifiée, évitant les effets indésirables - une habitude de programmation subtile mais importante.

Calculer le nombre total de rondes

Cette section prend plus de temps que prévu, et Tim admet ouvertement pourquoi : la logique est facile à mal comprendre.

Il démontre comment calculer les rondes en utilisant une boucle au lieu de s'appuyer sur des formules qui obscurcissent l'intention. L'objectif est la clarté plutôt que la ruse.

Tim vérifie chaque cas :

  • 2 équipes → 1 ronde

  • 3 équipes → 2 rondes

  • 4 équipes → 2 rondes

  • 8 équipes → 3 rondes

Il encourage à plusieurs reprises les spectateurs à faire une pause, tester et vérifier la logique isolément avant de la faire confiance.

Déterminer le nombre d'exemptions

Au lieu d'utiliser Math.Pow, Tim écrit délibérément une logique manuelle pour calculer la prochaine puissance de deux. Il explique qu'éviter les doubles réduit les erreurs et améliore la lisibilité.

Cette section montre comment les développeurs expérimentés choisissent souvent un code explicite et ennuyeux car il est plus facile à déboguer et à maintenir.

Créer la première ronde

La première ronde est unique parce que :

  • Les équipes sont connues

  • Les exemptions sont appliquées

  • Les affrontements parents n'existent pas

Tim explique attentivement comment les affrontements sont créés, quand un affrontement est terminé et comment les exemptions permettent automatiquement à une équipe d'avancer.

Cette logique est implémentée étape par étape, avec des pauses fréquentes pour expliquer pourquoi chaque décision a été prise.

Construire les rondes suivantes

Les rondes suivantes sont créées très différemment. Les équipes sont inconnues, donc les affrontements parents sont utilisés à la place.

Tim explique comment les affrontements de la ronde précédente alimentent la suivante, créant un arbre de tournoi complet avant qu'aucun jeu ne soit joué.

C'est l'une des décisions architecturales les plus importantes de toute l'application et elle permet :

  • Le suivi des scores

  • L'avancement des vainqueurs

  • L'automatisation future

Revue finale et vérification

Dans les dernières minutes de la leçon, Tim passe en revue le flux complet :

  • Les équipes sont randomisées

  • Les rondes sont calculées

  • Les exemptions sont assignées

  • Les affrontements sont générés

  • La structure du tournoi est complète

Il souligne que les bogues sont attendus, la logique s'améliore avec le temps, et les développeurs professionnels revisitent constamment le code antérieur pour l'améliorer.

Considérations Finales

La leçon 18 ne concerne pas les contrôles WinForms, l'UI glisser-déposer ou les fonctionnalités flashy. Elle concerne la réflexion, le design et l'écriture de code qui résistent à une utilisation réelle.

À la fin de la vidéo, l'application est passée d'une simple application Windows Forms à un programme .NET de bureau structuré et évolutif - un qui pourrait bien grandir au-delà de WinForms si nécessaire.

C'est là que l'apprentissage cesse d'être académique et commence à devenir professionnel.

Hero Worlddot related to Tutoriel sur la logique de tournoi C# WinForms — Analyse complète de la Leçon 18 (Tim Corey)
Hero Affiliate related to Tutoriel sur la logique de tournoi C# WinForms — Analyse complète de la Leçon 18 (Tim Corey)

Gagnez plus en partageant ce que vous aimez

Vous créez du contenu pour les développeurs travaillant avec .NET, C#, Java, Python ou Node.js ? Transformez votre expertise en revenu supplémentaire !

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi