Ma question est plus sur la façon d'architecturer une application MVC. Par exemple, nous sommes encouragés à utiliser DI avec le modèle de référentiel pour dissocier l'accès aux données du contrôleur, mais très peu est dit sur la façon de le faire spécifiquement pour MVC. Où placerons-nous les classes du référentiel, par exemple? Ils ne semblent pas être spécifiquement liés au modèle, car le modèle devrait également être relativement dissocié des technologies réelles d'accès aux données.
Une deuxième question concerne la façon de structurer les couches ou les niveaux. La plupart des exemples d'applications (Nerd dinner, Music Store, etc.) semblent tous utiliser une approche à deux niveaux, à deux niveaux (sans compter les tests) qui a généralement des contrôleurs appelant directement le code L2S ou EF.
Si je veux créer une application à plusieurs niveaux/couche, quelles sont les meilleures pratiques en matière de MVC?
DI est accompli en ASP MVC à l'aide d'une usine de contrôleurs. Cette usine est utilisée pour résoudre les dépendances de votre contrôleur.
MvcContrib dispose de certaines implémentations de Controller Facotry que vous pouvez utiliser immédiatement. J'utilise leur implémentation de Castle Windsor et cela fonctionne bien. Je suggère également de vérifier leur classe TestHelper. Il a des fonctionnalités très intéressantes pour se moquer du contrôleur HTTPContext, des sessions, etc. MVCContrib
Personnellement, j'aime donner à mes modèles une instance de référentiel avec laquelle travailler. Le modèle expose une API au référentiel (CRUD). La dépendance du contrôleur sur un modèle particulier est injectée lors de la création (constructeur), elle est injectée via la Controller Factory. Il s'agit de mon point d'entrée vers le graphe d'objets géré par mon conteneur IoC.
Où placerons-nous les classes du référentiel, par exemple?
Ils appartiennent au modèle; c'est le modèle intégré à l'application.
Comment structurer les calques? Si je veux créer une application à plusieurs niveaux/couche, quelles sont les meilleures pratiques en matière de MVC?
Les niveaux représentent les séparations physiques du code. Les couches représentent des séparations logiques. Les couches (telles qu'elles sont actuellement) fonctionnent bien pour MVC. Selon la quantité de logique métier, il peut être placé dans votre contrôleur, ou il peut être placé dans un assemblage distinct et peut être utilisé par le contrôleur pendant le cycle de demande.