Tout d'abord:
je crois que vous mélangez le modèle MVC et les principes de conception basés sur n niveaux.
L'utilisation d'une approche MVC ne signifie pas que vous ne devez pas superposer votre application.
Cela pourrait aider si vous voyez MVC plus comme une extension de la couche de présentation.
Si vous mettez du code de non-présentation dans le modèle MVC, vous risquez très bientôt de vous retrouver dans une conception compliquée.
Par conséquent, je vous suggère de placer votre logique métier dans une couche métier distincte.
Jetez un œil à ceci: Article de Wikipedia sur l'architecture à plusieurs niveaux
Il dit:
Aujourd'hui, MVC et MVP (Model-View-Presenter) sont des modèles de conception de séparation des préoccupations qui s'appliquent exclusivement à la couche de présentation d'un système plus grand.
Quoi qu'il en soit ... lorsque vous parlez d'une application Web d'entreprise, les appels de l'interface utilisateur à la couche de logique métier doivent être placés à l'intérieur du contrôleur (de présentation).
En effet, le contrôleur gère réellement les appels à une ressource spécifique, interroge les données en appelant la logique métier et lie les données (modèle) à la vue appropriée.
Mud vous a dit que les règles commerciales entraient dans le modèle.
C'est également vrai, mais il a mélangé le modèle (de présentation) (le «M» dans MVC) et le modèle de couche de données d'une conception d'application basée sur les niveaux.
Il est donc valide de placer vos règles métier liées à la base de données dans le modèle (couche de données) de votre application.
Mais vous ne devez pas les placer dans le modèle de votre couche de présentation structurée MVC car cela ne s'applique qu'à une interface utilisateur spécifique.
Cette technique est indépendante du fait que vous utilisiez une conception pilotée par domaine ou une approche basée sur un script de transaction.
Laissez-moi visualiser cela pour vous:
Couche de présentation: modèle - vue - contrôleur
Couche métier: logique de domaine - logique d'application
Couche de données: référentiels de données - Couche d'accès aux données
Le modèle que vous voyez ci-dessus signifie que vous avez une application qui utilise MVC, DDD et une couche de données indépendante de la base de données.
Il s'agit d'une approche courante pour concevoir une application Web d'entreprise plus grande.
Mais vous pouvez également le réduire pour utiliser une simple couche de gestion non DDD (une couche de gestion sans logique de domaine) et une simple couche de données qui écrit directement dans une base de données spécifique.
Vous pouvez même supprimer toute la couche de données et accéder à la base de données directement à partir de la couche métier, bien que je ne le recommande pas.
C'est le truc ... J'espère que cela aide ...
[Note:] Vous devez également être conscient du fait que de nos jours, il existe plusieurs "modèles" dans une application. Généralement, chaque couche d'une application a son propre modèle. Le modèle de la couche de présentation est spécifique à la vue mais souvent indépendant des commandes utilisées. La couche métier peut également avoir un modèle, appelé "modèle de domaine". C'est généralement le cas lorsque vous décidez d'adopter une approche axée sur le domaine. Ce "modèle de domaine" contient des données ainsi que de la logique métier (la logique principale de votre programme) et est généralement indépendant de la couche de présentation. La couche de présentation appelle généralement la couche de gestion sur un certain «événement» (bouton enfoncé, etc.) pour lire ou écrire des données dans la couche de données. La couche de données peut également avoir son propre modèle, qui est généralement lié à la base de données.
La question est: comment cela s'inscrit-il dans le concept MVC?
Réponse -> Non!
Eh bien - c'est un peu le cas, mais pas complètement.
En effet, MVC est une approche qui a été développée à la fin des années 1970 pour le langage de programmation Smalltalk-80. À cette époque, les interfaces graphiques et les ordinateurs personnels étaient assez rares et le World Wide Web n'était même pas inventé! La plupart des langages de programmation et des IDE actuels ont été développés dans les années 1990. À cette époque, les ordinateurs et les interfaces utilisateur étaient complètement différents de ceux des années 1970.
Vous devez garder cela à l'esprit lorsque vous parlez de MVC.
Martin Fowler a écrit un très bon article sur MVC, MVP et les interfaces graphiques actuelles.