Le Modèle Vue Controller semble s'adresser à vos 3 niveaux, mais ce n'est pas le cas. Il organise vraiment la manière dont votre interface utilisateur est mise en place. Le Contrôleur est au milieu et typiquement (A) effectue des actions en utilisant des objets d'affaires et (B) à partir des objets d'affaires récupère les objets Modèle à transmettre à la Vue. La partie MVC de votre système (la fonctionnalité de l'interface utilisateur) ne sait pas ce qui se passe de l'autre côté de la couche métier. Base de données? Appels de services? E/S disque? Tirs de lasers? Ainsi, MVC-B-? serait un acronyme qui décrit MVC et comment cela se connecte.
Pensez au Controleur au centre, avec une ligne qui va vers le bas vers les objets d'affaires. Le contrôleur récupérera généralement le Modèle des objets affaires pour le transmettre à la Vue, mais le Modèle n'est que des données. C'est essentiel. Le Controleur est maintenant la partie la plus intelligente du système dans un sens, mais les objets d'affaires restent les plus puissants.
Ainsi, les objets Modèle sont une grande partie de la communication entre le Controleur et les objets d'affaires. De plus, chaque vue a un VM (Vue Modèle) objet qu'elle prend, qui pourrait être un Modèle, mais pourrait être quelque chose construit par le Controleur pour transmettre des ensembles d'informations plus complexes à la Vue.
Ainsi, un contrôleur (1) prend des données du client et fait des actions avec les objets affaires (si nécessaire), communiquant peut-être en utilisant des objets Modèle, puis (2) obtient des objets Modèle auprès d'objets d'affaires, construit un VM et le donne à une vue (éventuellement plusieurs) pour être rendu.
Au début, cela semblera vraiment être des couches et niveaux partout, surtout parce que se plonger dans le MVC est un bon moment pour augmenter votre utilisation des interfaces (voir les 3 ou 4 principes SOLID) et le test unitaire. Vous aurez probablement beaucoup plus de fichiers dans votre projet que vous en auriez autrement. Très rapidement cependant, vous verrez que c'est en fait une excellente façon d'organiser les choses.
En tant que partie "sommet" du système, la partie MVC, nous nous soucions simplement de la manière dont les objets Modèle ont été construits ou de ce que les objets d'affaires en font. Ne soyez pas surpris bien sûr si votre objet Client modèle ressemble beaucoup à votre table de base de données pour les Clients! C'est normal et courant. Cependant, votre objet Modèle client et votre objet d'affaires client auront vraiment des vies distinctes. C'est un bon moment pour envisager le Modèle de Référentiel.
Résistez à la tentation d'être paresseux et de mettre beaucoup de logique dans le Controleur. Efforcez-vous à chaque instant de placer les préoccupations là où elles appartiennent. Le Controleur sert simplement à connecter les choses. S'il y a beaucoup de code nécessaire là pour construire un VM adéquat pour que la vue l'utilise, c'est normal, car c'est le travail des contrôleurs. Trop souvent, on voit de la logique métier ou de rendu dans le contrôleur. Mettez-la là où elle doit être!
J'ai essayé de trouver un équilibre entre l'exhaustivité et la concision, mais vous avez posé une énorme question!
0 votes
Si une architecture particulière ne semble pas convenir à votre application, peut-être devriez-vous envisager un autre design ? MVC n'est pas toujours le meilleur choix. Cependant, je serai intéressé de voir les réponses ici.