2010-01-09 10 views
3

Aurais-je raison de penser que le 'Modèle' représenté par le M dans MVP pourrait être un modèle de domaine ou un modèle de présentation/vue?Modèles en mode Présentateur MVP

+0

Voulez-vous dire MVC? –

+0

@Jan Je veux dire MVP. Y at-il quelque chose qui ne va pas avec ma question? Peut-être un peu de compréhension. – David

Répondre

7

Oui, le modèle pourrait être essentiellement n'importe quel modèle. La façon dont je le vois, l'intention originale de MVC était qu'il s'agit d'un objet de domaine, et c'est certainement encore possible.

Cependant, mon expérience a montré qu'un meilleur ajustement est atteint si nous introduisons un modèle ViewModel/Presentation spécialisé comme isolant entre le modèle de domaine et la vue.

Même lorsque le ViewModel semble être sémantiquement identique à l'objet de domaine, une telle isolation nous permet de faire varier les deux indépendamment et donc de suivre les Single Responsibility Principle.

Il s'avère souvent que la vue nécessite une certaine logique qui s'applique à la technologie d'interface utilisateur spécifique, et cette logique s'adapte mal dans le modèle de domaine. Les exemples incluent

  • Logique qui détermine si un contrôle particulier doit être activé ou désactivé. Les modèles de domaine ne devraient rien savoir des contrôles.
  • Logique qui mappe un état sur une couleur. Les couleurs sont spécifiques à la technologie: ce sont des types CLR différents sur Windows Forms, WPF et ASP.NET.
  • Validation. Les formulaires d'entrée permettent normalement l'entrée de données invalides sans lancer d'exceptions. Au lieu de cela, ils fournissent des commentaires à l'utilisateur que les données sont invalides. D'un autre côté, les objets de domaine devraient protéger leurs invariants, et ainsi lancer des entrées invalides.

Plus d'informations peuvent être trouvées ici

+0

Merci pour cette excellente explication. Mon intention était de faire en sorte que les contrôleurs questionnent le domaine et qu'un assistant (une sorte de mappeur/assembleur) construise un modèle de vue spécifique à la présentation, conviendriez-vous que cette approche est correcte? – David

+0

Oui, cliquez sur le modèle de domaine pour récupérer ce dont vous avez besoin, utilisez un mappeur pour mapper le ViewModel et restaurez la vue à l'aide de ce ViewModel. C'est essentiellement ce que je fais aussi. –

+0

Merci encore Mark. J'ai d'autres questions sur ce sujet que je vais poser et j'apprécierais votre contribution. – David

Questions connexes