Je me souviens avoir appris VB4 et avoir fait glisser un bouton sur un formulaire, double-cliquer sur ce bouton et taper du code dans ce gestionnaire d'événements dont je venais juste d'être béni par magie. Venant de QBASIC, j'étais ravi du "V" dans "VB", le concepteur visuel était littéralement la meilleure chose depuis le pain tranché.
Bien sûr, vous pouvez faire tout cela par programmation, mais la magie du "V" était si attrayante que vous ne pouviez pas vous empêcher de faire glisser ce bouton. Nous avons été encouragés à emprunter cette voie.
Mais il y a quelques années, j'ai commencé à découvrir C # et le framework .net et j'ai été fasciné par la façon dont tout ce que je pensais savoir venait de disparaître. Il y a beaucoup de magie dans VB6 qui est complètement dévoilé dans .net: prenez les constructeurs et la InitializeComponents
méthode par exemple. Dans ce dernier, vous trouverez toutes les instances de contrôle que vous avez faites glisser depuis la boîte à outils, tous les événements que vous avez enregistrés et les propriétés que vous avez définies dans le concepteur.
Et ça va ... je suppose. C'est juste, j'ai l'impression de ne pas "posséder" ce qui se passe, ce code que je ne peux que modifier via le concepteur me dérange énormément. Chaque fois que vous copiez un bouton qui dit "Ok" d'un formulaire à un autre (parfois avec son frère "Annuler"), vous dupliquez en fait du code, et c'est un péché n'est-ce pas? SEC, ne vous répétez pas, dit le Pape .
Les religions et les écoles de pensée mises à part, en toute objectivité, ne devrions-nous pas plutôt dériver des formes des formes de base et laisser le bouton "Ok" (et tous ses amis) vivre sur la forme de base? Quelque chose comme un FormBase
dont dérive un DialogFormBase
; toutes les classes créées en un rien de temps ... en tapant du code. Les boutons sont créés en fonction de la façon dont la classe est instanciée (c'est-à-dire qu'un argument d'énumération constructeur détermine quels boutons doivent être créés), les contrôles sont disposés à l'intérieur d'un agencement de panneaux divisés et de panneaux de disposition de flux, injectés dans le formulaire commeContent
qui s'intègre dans le panneau de contenu principal. N'est-ce pas ce que fait ASP.net avec les pages maîtres et les espaces réservés de contenu? Je dérivais un formulaire lorsque j'avais besoin d'une nouvelle "page maître", mais cette nouvelle "page maître" dérive toujours d'une classe de formulaire de base, de sorte que les visuels sont cohérents dans l'ensemble de l'application.
Pour moi, c'est beaucoup plus de réutilisation de code que tout ce que j'ai jamais fait avec le concepteur dans WinForms, et ce n'était même pas difficile, et le code n'est pas encombré avec une méthode de 200 lignes sur laquelle je n'ai aucun contrôle, je peux mettre des commentaires où j'aime, ils ne seront pas écrasés par un designer. Je suppose que c'est juste une question de modèles et d'architecture, c'est ce qui m'a amené à ce lien: le meilleur design pour les formulaires Windows qui partageront des fonctionnalités communes , où j'ai réalisé que j'étais sur place, sauf la réponse là-bas, suggère exactement ce que je suis faire, mais il est conseiller contre l' héritage de forme en raison de considérations de design. C'est la partie que je ne comprends pas .en raison de considérations de structure de code, en particulier en ce qui concerne l'héritage de forme et de contrôle, que je ne vois aucune raison d'éviter, sinon il casse le concepteur .
Nous ne pouvons pas tous être paresseux, alors quelle partie me manque-t-elle?