dans MVC/MVP / MVPC, Quelle est votre logique d'entreprise?
dans le modèle de conception MVC/MVP/MVPC où mettez-vous votre logique d'entreprise? Non, Je ne veux pas dire ASP.NET MVC Framework (alias "Tag Soup").
certaines personnes disent que vous devriez le mettre dans le" contrôleur "dans MVC/MVPC ou"présentateur". Mais d'autres pensent qu'elle devrait faire partie du modèle.
Que pensez-vous et pourquoi?
6 réponses
C'est comme ça que je le vois:
le contrôleur est pour la logique d'application; logique qui est spécifique à la façon dont votre application veut interagir avec le domaine de connaissances qu'il concerne.
le modèle est pour la logique qui est indépendante de l'application. c'est-à-dire une logique valable dans toutes les applications possibles du domaine de connaissances auquel elle se rapporte.
par conséquent, presque toutes les règles commerciales seront dans le modèle.
je trouve une question utile à me poser quand j'ai besoin de décider où mettre de la logique est "Est-ce toujours vrai, ou juste pour la partie de l'application que je suis en train de coder?"
The way I have my ASP.NET structure de l'application MVC le workflow ressemble à ceci:
Contrôleur - > Services - > Dépôts
la couche Services ci-dessus est l'endroit où toute la logique commerciale a lieu. Si vous mettez votre logique d'affaires dans votre couche de Controller, vous perdez la possibilité de réutiliser cette logique d'affaires dans d'autres controllers.
Je ne crois pas qu'il appartienne au contrôleur, parce qu'une fois qu'il y est intégré, il ne peut pas sortir.
je pense que MVC devrait avoir une autre couche injectée entre les deux: une couche de service qui correspond aux cas d'utilisation. Il contient la logique d'affaires, connaît les unités de travail et les transactions, et traite des objets de modèle et de persistance pour accomplir ses tâches.
le contrôleur a une référence au service dont il a besoin pour remplir son cas d'utilisation. Il s'inquiète de désassembler les requêtes dans les objets que le service peut traiter, appelle le service, et mobilise la réponse pour la renvoyer à la vue.
avec cet arrangement, le service est utilisable seul même sans la paire contrôleur/vue. Il peut s'agir d'un objet local ou distant, empaqueté et déployé de n'importe quelle manière que vous voulez, que le contrôleur traite.
le contrôleur devient maintenant plus étroitement lié à la vue. Après tout, le contrôleur vous allez utiliser pour un bureau est susceptible d'être différent de celui d'une application web.
je pense que cette conception est plus axée sur le service.
mettez votre logique d'affaires dans le domaine et gardez votre séparateur de domaine. J'ai préféré Présentateur -> Commande (commande de Message utiliser NServiceBus) -> Domaine (avec la colombie-britannique Délimité Contexte) -> EventStore -> gestionnaire d'Événement -> Référentiel (lire modèle). Si la logique n'est pas adaptée au domaine, utilisez la couche service.
veuillez lire l'article de Martin fowler, Eric Evan, Greg Young et Udi dahan. Ils ont défini une image très claire.
Voici l'article écrit par Mark Nijhof: http://elegantcode.com/2009/11/11/cqrs-la-greg-young /
pour l'amour du ciel, mettez-le dans le modèle!!!!!
bien sûr, certains de l'interaction de l'utilisateur devra être dans la vue, qui seront liés à votre application et logique d'entreprise, mais éviter cela autant que possible. Ironiquement, en suivant le principe de faire aussi peu que possible car l'utilisateur "travaille" dans votre GUI et autant pendant les "soumettre" ou les demandes d'action fait pour un meilleure expérience de l'utilisateur et de l'utilisabilité, pas l'inverse. À au moins pour les applications professionnelles.
vous pouvez le mettre à deux endroits. Le Contrôleur et dans la couche de Présentation. En ayant une partie de la logique dans la couche de présentation, vous pouvez limiter le nombre de requêtes dans l'architecture qui ajoute de la charge au système. Oui, vous devez coder deux fois, mais parfois c'est ce dont vous avez besoin pour une expérience utilisateur réactive.
j'aime un peu ce qui a été dit ici ( http://www.martinhunter.co.nz/articles/MVPC.pdf )
" avec MVPC, l'élément présentateur du modèle MVP est divisé en deux composants: le présentateur (voir la logique de contrôle) et le contrôleur (abstract purpose control logic)."