Implémentation de MVC avec Windows Forms

Où puis-je trouver un bon exemple pour implémenter complètement le modèle MVC dans Windows Forms?

J’ai trouvé de nombreux tutoriels et exemples de code sur divers sites (par exemple, The Code Project et .NetHeaven), mais beaucoup sont plus représentatifs du modèle d’observateur que MVC. Étant donné que l’application que je souhaite développer est destinée à un projet scolaire, je suis réticent à utiliser des frameworks tels que PureMVC ou MVC # .

Je suis d’avis que les applications sont si différentes les unes des autres et que notre compréhension de la manière dont les applications doivent être écrites est encore très limitée. Les applications Windows Forms antérieures sur lesquelles j’ai travaillé étaient très différentes les unes des autres. Certaines des différences de conception que j’ai vues sont (y compris la plupart des combinaisons):

  • Parlez directement à la firebase database (2 niveaux)
  • Utilisez un backend qui a été écrit pour l’application donnée (3 niveaux)
  • Utilisez un ensemble de services Web écrits pour être utilisés par de nombreuses applications et ne pouvant pas être modifiés pour votre application. (Architecture orientée services)
  • Mises à jour effectuées par les opérations du CRUD
  • Mises à jour effectuées avec le modèle de commande (envoi de commandes au serveur principal)
  • Beaucoup d’utilisations de la liaison de données / pas d’utilisations de la liaison de données
  • La plupart des données étant «similaires à des tables» (par exemple, les factures) qui fonctionnent bien dans les contrôles de grid standard / nécessitent des contrôles personnalisés pour la plupart des données de l’interface utilisateur.
  • Un développeur / des équipes de 10 ou 20 développeurs (uniquement sur l’interface utilisateur)
  • Beaucoup de tests unitaires utilisant des simulations, etc. / pas de tests unitaires

Par conséquent, je ne pense pas qu’il soit possible de créer une seule implémentation de MVC (ou MVP) qui corresponde toujours bien.

Les meilleurs messages que j’ai vus expliquant vraiment MVC et la raison pour laquelle un système MVC est construit tel quel, est la série “Build Your Own CAB” de Jeremy D Miller . Après avoir travaillé, vous devriez pouvoir mieux comprendre vos options. Microsoft Smart Client Guidance (CAB / Microsoft Composite Application Block) doit également être pris en compte. C’est un peu complexe, mais cela peut bien fonctionner pour les applications qui conviennent bien.

La sélection d’une implémentation MVC / MVP pour un projet Winforms donne une vue d’ensemble qui mérite d’être lue. Beaucoup de gens aiment PureMVC . Je ne l’ai jamais utilisé, mais je le regarderais la prochaine fois que j’ai besoin d’un framework MVC.

” Presenter First ” est une approche de développement logiciel qui combine les idées du modèle de conception MVP (Model View Presenter) et le développement piloté par les tests . Il vous permet de commencer par écrire des tests dans la langue du client. Par exemple:

“Lorsque je clique sur le bouton” Enregistrer “, le fichier doit être enregistré et l’avertissement du fichier non enregistré doit disparaître.”

Je n’ai aucune expérience en utilisant “Presenter First”, mais je vais essayer quand j’en ai l’occasion, car cela semble très prometteur.

D’autres questions de débordement de stack que vous pourriez vouloir examiner sont ici et ici .

Si vous envisagez d’utiliser WPF à un moment donné, consultez le modèle ViewModel (MVVM) de View-View . Voici une très bonne vidéo que vous devriez consulter: Jason Dolinger sur Model-View-ViewModel .

MVVM (Model View View Model) Modèle de conception pour Winforms donne une autre option qui peut faciliter la conversion en WPF si nécessaire. Magical.Trevor est un autre exemple MVVM pour Windows Forms qui inclut également une liaison automatique basée sur les noms de propriété.


Demandez-vous également pourquoi vous utilisez MVC.

  • Souhaitez-vous pouvoir tester autant de code que possible?
  • Essayez-vous de réutiliser autant de code que possible?
  • Essayez-vous de rendre votre base de code facile à comprendre?
  • 101 autres raisons pouvant être valables pour un projet donné.

Une fois que vous êtes clair sur vos objectives , il devient plus facile de choisir une implémentation ou une autre.

MISE À JOUR: En plus de ma réponse précédente ci-dessous, je suggère de lire à propos de l’ approche “Presenter First” (en particulier les articles PDF)

Je recommanderais MVP (modèle PassiveView en fait) au lieu de MVC. Vous n’avez pas vraiment besoin de frameworks spéciaux pour cela, c’est juste la façon dont vous organisez votre code.

Une approche (que je prends généralement) consiste à diviser chaque formulaire de fenêtre en trois entités:

  1. Une classe de présentateur / contrôleur – c’est ce que vous commencez réellement lorsque vous développez un formulaire. C’est là que réside la plus grande partie de votre logique “métier”.
  2. Une interface de vue (IView) qui contient les méthodes, les propriétés et les événements. Cette interface est tout ce que le présentateur sait sur votre formulaire.
  3. À la fin, lorsque vous avez fini d’implémenter le présentateur et la vue (y compris les tests unitaires), vous pouvez ensuite créer la classe de formulaire réelle et l’implémenter dans l’interface IView. Il suffit ensuite d’append des contrôles appropriés au formulaire et de les connecter à l’interface.

Exemple de code (un pseudo-code simple, juste pour illustration):

interface IView { ssortingng Username { get; set; } ssortingng Password { get; set; } event EventHandler LogOnButtonClicked; void InformUserLogOnFailed(); void MoveToMainScreen(); } class Presenter { public Presenter(IView view) { this.view = view; view.LogOnButtonClicked += new EventHandler(OnLogOnButton); } private void OnLogOnButton() { // we ask some service to verify the username/password bool isLogOnOk = logOnService.IsUserAndPasswordOk(view.Username, view.Password); if (isLogOnOk) view.MoveToMainScreen(); else { view.Username = ""; view.Password = ""; view.InformUserLogOnFailed(); } } private IView view; } class Form : IView { public Form() { presenter = new Presenter(this); } public ssortingng Username { get { return TextBoxUsername.Text; } set { TextBoxUsername.Text = value; } } public ssortingng Password { get { return TextBoxPassword.Text; } set { TextBoxPassword.Text = value; } } public void InformUserLogOnFailed() { MessageBox.Show("Invalid username or password."); } public void MoveToMainScreen() { // code for opening another form... } private Presenter presenter; } 

Avez-vous regardé PureMVC ? J’ai trouvé que personne ne peut être d’accord sur ce à quoi MVC ressemble vraiment une fois qu’ils commencent à construire une implémentation spécifique.

Mise à jour: Vous pouvez créer votre propre version en commençant par quelque chose de plus simple, comme MobileMVC . Le code Compact Framework doit comstackr / exécuter OK sur Windows. Comme il s’agit d’une mission scolaire, je vous suggère de passer un certain temps à apprendre comment MVC fonctionne réellement.

Vous voudrez peut-être jeter un oeil à l’ exécution différentielle .

Ici c’est dans SourceForge

IMO, il s’agit d’une amélioration considérable par rapport à MVC, même s’il est encore assez inhabituel.

Un bon exemple de déploiement de votre propre implémentation de MVC à l’aide de Windows Forms peut être trouvé ici . Le code source est inclus.

Lorsque vous lisez, étudiez et écrivez du code pour cette tâche, vous constaterez qu’il existe de nombreux désaccords sur la manière dont MVC doit être implémenté. Celui-ci est un cas simple qui reflète la séparation des préoccupations, ainsi qu’un bon exemple de la «plomberie» nécessaire pour y parvenir.

Lorsque vous ne serez pas à l’école, vous voudrez probablement vous rabattre sur un cadre comme le recommandent les autres affiches.

Le bloc Microsoft Composite Interface Application a commencé sa vie en tant qu’implémentation MVC (parmi d’autres modèles qu’il a implémentés). La version finale a cependant évolué vers une implémentation MVP, qui peut être considérée comme une sorte d’interprétation différente du concept MVC.

Si vous souhaitez vérifier le code d’une implémentation MVP très complète (et en quelque sorte complexe), vous pouvez trouver MS-CAB comme l’un des composants de Microsoft Smart Client Software Factory. Il est livré avec le code source. Vous pouvez le trouver ici . Bonne chance!