Je déconseille de traiter le modèle comme une simple couche d'accès aux données. C'est trop simplifié, et cela vous oblige à mettre trop de code dans la couche Controller. Il est préférable d'ajouter davantage de code dans le modèle et de ne faire de la persistance de la base de données qu'une partie du code interne du modèle. Je me plais à penser de MVC comme ceci:
- Controller: poignée d'entrée, déterminer quel modèle et qui Voir instancier
- Vue: présentation des données d'application
- Modèle: toute autre logique pour l'application, y compris mais non limité à DAL
Il s'agit essentiellement du modèle Page Controller.
Une autre façon d'y penser est la suivante: supposons que vous deviez porter votre application Web sur une autre plateforme, telle qu'une application de ligne de commande ou une application graphique de bureau. Quelles parties de la logique d'application devez-vous réutiliser? Le contrôleur et la vue changeraient au fur et à mesure que vous porteriez votre application sur une autre plateforme, car l'implémentation des entrées et des sorties devrait changer. Le code qui n'a pas besoin d'être modifié doit être implémenté dans votre modèle. Si vous avez bien fait la séparation des préoccupations, alors le modèle, la vue et le contrôleur seront couplés de manière minimale, et vous pourrez en modifier l'implémentation sans trop affecter les autres. Si vous modifiez le modèle et que vous vous retrouvez à réécrire beaucoup de code dans le contrôleur ou la vue, vous n'avez probablement pas séparé ces couches de manière adéquate. Et vice versa.
Lisez à propos de l'antipattern Anemic Domain Model de Martin Fowler ou Domain Driven Design Quickly pour avoir d'autres perspectives.
Également voir mon blog from 2008 que j'ai écrit en réponse à des personnes décriant le modèle Active Record. Il a eu de bons commentaires et discussions.
Je suis d'accord. Les contrôleurs maigres et les gros modèles me facilitent la vie. –