97 votes

ASP.NET MVC - logique métier doit exister dans les contrôleurs ?

Derik Whitaker a posté un article il y a quelques jours qui a touché un point que j'ai été curieux de connaître depuis un certain temps: les entreprises doivent logique existe dans les contrôleurs?

Jusqu'à présent, tous les ASP.NET MVC démos que j'ai vu mettre de l'accès au référentiel et la logique métier dans le contrôleur. Certains même se lancer validation de là aussi bien. Il en résulte assez grand, un gonflement de contrôleurs. Est-ce vraiment la façon d'utiliser le framework MVC? Il semble que c'est simplement d'aller jusqu'à la fin avec beaucoup de code dupliqué et logique répartissent dans les différents contrôleurs.

75voto

jonnii Points 17046

Logique métier doit vraiment être dans le modèle. Vous devriez viser pour les gros modèles, contrôleurs de maigres.

Par exemple, au lieu d’avoir :

J’aurais plutôt :

Cela suppose que la taxe est calculer par un service externe et nécessite votre modèle afin de connaître les interfaces à vos services externes.

Cela rendrait votre contrôleur ressembler à :

Ou quelque chose comme ça.

64voto

AlejandroR Points 1481

J’aime le diagramme présenté par Microsoft Patterns & Practices. Et je crois en l’adage « une image vaut mille mots ».

Diagram shows architecture of MVC and business sevices layers

14voto

Joe Soul-bringer Points 1890

C'est une question passionnante.

Je pense que c'est intéressant qu'un grand nombre d'échantillons de MVC applications ne parviennent pas à suivre le paradigme MVC dans le sens de vraiment placer la "logique d'entreprise" entièrement dans le modèle. Martin Fowler a souligné que le MVC n'est pas un modèle dans le sens de la bande des Quatre. C'est plutôt paradigme que le programmeur doit ajouter des motifs à si ils sont en train de créer quelque chose au-delà d'un jouet app.

Donc, la réponse courte est que la "logique d'entreprise" devrait en effet pas vivre dans le contrôleur, car le contrôleur a pour fonction de traiter avec le point de vue et les interactions de l'utilisateur et nous voulons créer des objets avec un seul but.

Plus de réponse, c'est que vous avez besoin de mettre une certaine pensée dans la conception de votre modèle de couche avant de passer juste la logique du contrôleur de modèle. Peut-être que vous pouvez gérer l'ensemble de la logique d'application à l'aide de REPOS, auquel cas la conception du modèle devrait être assez clair. Si non, vous devriez savoir ce que l'approche que vous allez utiliser pour garder votre modèle de devenir pléthorique.

14voto

Leniel Macaferi Points 38324

Vous pouvez consulter ce tutoriel Super par Stephen Walther qui montre la validation à l’aide d’une couche de Service.

Apprendre à bouger votre logique de validation de vos actions de contrôleur et dans une couche de service distinct. Dans ce tutoriel, Stephen Walther explique comment vous pouvez maintenir une séparation nette des problèmes en isolant votre couche de service de votre couche de contrôleur.

8voto

Jag Reehal Points 89

Jetez un oeil à mon blog sur ASP.NET MVC contrôleur conseillées et contrôleurs maigres où je m’adresse à cette question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X