Bonjour,
Question philosophique: où placer la logique métier dans un modèle MVC (custom ou bien dans des framework comme Code Igniter, Zend...), dans le contrôleur ou le modèle ?
Si on m'avait posé cette question même il y a un mois, j'aurais sauté sur mon clavier et répondu : "Ben, dans le contrôleur voyons", fier de moi et légitimé par des phrases de tutos telles que :
Mais"Le contrôleur est le chef d'orchestre de notre application. Il demande au modèle les données, les traite et appelle la vue qui utilisera ces données pour afficher la page.", tirée d'un célèbre MOOC php du web
(tuto de développez)La partie Modèle d'une architecture MVC encapsule la logique métier (« business logic ») ainsi que l'accès aux données. Il peut s'agir d'un ensemble de fonctions (Modèle procédural) ou de classes (Modèle orienté objet).
Moi j'ai toujours pensé que c'est au contrôleur de transformer les données récupérées d'un modèle, de les "digérer" et de les envoyer à la vue/aux vues ensuite...
Mais en allant du côté des anglo-saxons, on trouve une toute autre approche (celle donnée par ce tuto de développez), qu'on peut lire aussi, par exemple dans cet excellent article:
résumé par:
dont la traduction de la partie concernant la relation modèle/contrôleur pourrait donner:Fat models, skinny controllers!
Keep as much business logic in the model as possible.
If you see your controller getting “fat”, consider offloading some of the logic to the relevant model (or else bad things will start happening!).
Models should not talk to the views directly (and vice versa).
Related models provide information to the controller via their association (relation).
It’s quite alright for the views to contain some logic, which deals with the view or presentation.
J'aimerai connaître votre point de vue / expérience sur le sujet... qu'est-ce qu'il y à gagner à glisser autant de logique métier que possible au modèle plutôt qu'au contrôleur ?des modèles bien gras, des contrôleurs maigres
Garder autant de logique métier que possible dans le modèle
Si vous voyez un contrôleur s'engraisser, réfléchissez à décharger une partie de la logique métier au modèle afférent (ou sinon des problèmes vont commencer à apparaître)
....
Partager