MVC est un exercice de séparation des préoccupations , une architecture d'interface utilisateur. C'est un moyen de remédier à la complexité qui peut survenir dans les interfaces utilisateur du fait que la présentation n'est pas séparée du contenu .
En théorie, tous les objets peuvent avoir un comportement qui agit sur les données qu'ils contiennent, et ces données et ce comportement restent encapsulés . En pratique, un objet OOP donné peut avoir ou non une logique qui correspond à ses données, ou peut ne pas avoir de logique du tout (un objet de transfert de données , par exemple).
Dans MVC, la logique métier est intégrée au modèle et non au contrôleur. Le contrôleur est vraiment juste un intermédiaire pour coller ensemble la vue et le modèle. Ainsi, dans le modèle, vous pouvez avoir les données et le comportement au même endroit.
Mais même cet arrangement ne garantit pas une fusion stricte données / comportement. Les objets contenant uniquement des données peuvent être exploités par d'autres classes contenant uniquement de la logique, ce qui est une utilisation parfaitement acceptable de la POO.
Je vais vous donner un exemple spécifique. C'est un peu artificiel, mais supposons que vous ayez un Currency
objet, et que cet objet ait la capacité de se représenter dans n'importe quelle devise disponible, indexée sur le dollar. Donc, vous auriez des méthodes comme:
public decimal Yen { get { return // dollars to yen; } }
public decimal Sterling { get { return // dollars to sterling; } }
public decimal Euro { get { return // dollars to euro; } }
... et ce comportement serait encapsulé avec l'objet Devise.
Mais que se passe-t-il si je souhaite transférer la devise d'un compte à un autre ou déposer une devise? Ce comportement serait-il également encapsulé dans l'objet Devise? Non, ce ne serait pas. L'argent dans votre portefeuille ne peut pas être transféré de votre portefeuille dans votre compte bancaire; vous avez besoin d’un ou de plusieurs agents (guichet automatique ou guichet automatique) pour vous aider à transférer cet argent sur votre compte.
Alors que le comportement serait encapsulé dans un Teller
objet, et il accepterait Currency
et des Account
objets comme des entrées, mais il ne contiendrait aucune donnée elle - même, sauf peut - être un peu d'état local (ou peut - être un Transaction
objet) pour aider à traiter les objets d'entrée.