2008-12-16 4 views
3

Je vais commencer cette question en admettant que je suis très nouveau à MVC. Le modèle de conception a du sens pour moi à un haut niveau, mais maintenant que j'explore ASP.NET MVC, certaines des pièces architecturales défient mes idées préconçues. L'apprentissage est une bonne chose.Les contrôleurs gèrent le flux des applications, alors où va ma logique métier?

J'ai récemment travaillé avec Oxite récemment comme un outil d'apprentissage écrit par des gens au company qui a créé ASP.NET MVC et donc, une application de référence ostensible pour ASP.NET MVC.

Mais aujourd'hui, j'ai vu a blog post about Oxite par Rob Conery qui dit:

L'une des choses que l'équipe Oxite a décidé de faire était de séparer les contrôleurs et vues dans un autre projet pour ce que je ne peux supposer est la séparation de la logique métier de voir la logique. Cela peut conduire à une confusion étant donné que les contrôleurs sont signifiés pour gérer le flux d'application - pas logique métier nécessairement.

Cela m'a jeté pour une boucle. Cette séparation est-elle un principe de MVC et donc une erreur des développeurs d'Oxite, ou est-ce l'opinion de Rob? Si la logique métier appartient au modèle, pourquoi l'équipe Oxite l'a-t-elle placée dans le contrôleur? Comment exécuter une action qui est logique métier sinon dans le contrôleur?

En plus de cela, est-ce que je fais une erreur en utilisant Oxite comme un benchmark d'apprentissage en considérant des commentaires comme celui de Rob?

+0

Oxite n'a pas été créé par "Microsoft". Il a été créé par quelques développeurs travaillant chez Microsoft. Rob Conery travaille également chez Microsoft btw. –

+0

@Todd, merci pour la clarification. Les matériaux de communiqué de presse et tout cela indiquent qu'Oxite est une «chose» de Microsoft, donc l'association colle. –

Répondre

2

Votre logique métier est intégrée à votre couche de gestion. Les contrôleurs utilisent la couche de gestion pour créer un modèle pour le rendu de vos vues. Un bon exemple est l'application MVC Storefront que Rob Conery a produite. Oxite reçoit actuellement beaucoup de mauvaise presse car il ne fait apparemment pas bon usage du framework MVC. La raison pour laquelle vous souhaitez une couche de gestion distincte de vos contrôleurs est que vous souhaitiez réutiliser la couche de gestion sur plusieurs contrôleurs ou même plusieurs applications. Un exemple de ceci serait des fonctions utilisateur normales pour afficher des données, et une fonction administrative pour mettre à jour et ajouter des données. Vous pouvez utiliser les mêmes composants BL dans les deux cas, mais avoir des contrôleurs et des vues différents à rendre aux données. Les objets du modèle seraient les mêmes.

+0

Donc, ma crainte que Oxite n'est pas le meilleur outil pour apprendre ASP.NET MVC n'est pas infondée. Je devrais regarder l'application de la vitrine. –

+0

Oxite est un désordre d'une application ASP.NET MVC et devrait être évitée comme la peste! –

+0

Question ancienne, mais j'essaie toujours de trouver un exemple solide d'ASP.NET avec des couches de service et de gestion. – Sinjai

1

Vous pouvez implémenter votre couche de gestion (c'est-à-dire le modèle) avec vos entités, agrégats, référentiels et services. Les services appellent les dépôts, qui tirent les données de votre DAL sous la forme d'entités.

Cela peut être défini dans un seul projet séparé qui n'est rien de plus qu'une DLL.

Ensuite, ayez votre application MVC, qui est vraiment votre couche de présentation, et utilisez-la pour votre projet de couche de gestion. Les contrôleurs fonctionneront avec vos services et pomperont les données générées par ces services dans ViewData, qui sera ensuite pompée dans vos vues.

Les contrôleurs ne devraient répondre aux préoccupations de routage, telles que les vues à afficher, sur la base de l'entrée d'utilisateur des formes, querystrings, cookies, sessions, etc.

il y a eu un tollé de la « MVC puristes » communauté à propos de la validité de Oxite étant utilisé un bon exemple MVC.En fin de compte, la logique métier ne devrait pas être contenue dans les contrôleurs, ce que je suis sûr que vous verrez comme Oxite sera refactorisé au cours des prochains mois.

Questions connexes