MVC es un ejercicio en Separation of Concerns , una arquitectura de IU. Es una forma de acorralar la complejidad que puede ocurrir en las interfaces de usuario debido a que la presentación no se separa del contenido .
En teoría, todos los objetos pueden tener un comportamiento que opera con los datos que contienen, y los datos y el comportamiento siguen siendo encapsulado . En la práctica, un objeto OOP dado puede o no tener una lógica que se corresponda con sus datos, o puede que no tenga ninguna lógica (un Data Transferir objeto , por ejemplo).
En MVC, la lógica de negocios va en el modelo, no en el controlador. El controlador es realmente un intermediario para unir la Vista y el Modelo. Entonces, en el modelo, puedes tener datos y comportamiento en el mismo lugar.
Pero incluso esa disposición no garantiza una fusión estricta de datos / comportamiento. Los objetos que contienen solo datos pueden ser operados por otras clases que solo tienen lógica, y este es un uso perfectamente aceptable de la POO.
Te daré un ejemplo específico. Esto es un poco artificial, pero digamos que tiene un objeto Currency
, y ese objeto tiene la capacidad de representarse a sí mismo en cualquier moneda disponible, vinculado al dólar. Así tendrías métodos como:
public decimal Yen { get { return // dollars to yen; } }
public decimal Sterling { get { return // dollars to sterling; } }
public decimal Euro { get { return // dollars to euro; } }
... y ese comportamiento se encapsularía con el objeto de moneda.
¿Pero qué sucede si quisiera transferir la moneda de una cuenta a otra o depositar alguna moneda? ¿Ese comportamiento también estaría encapsulado en el objeto de moneda? No, no lo haría. El dinero en su billetera no puede transferirse de su billetera a su cuenta bancaria; necesita uno o más agentes (un cajero o cajero automático) para ayudarlo a ingresar ese dinero en su cuenta.
De modo que el comportamiento se encapsularía en un objeto Teller
y aceptaría los objetos Currency
y Account
como entradas, pero no contendría ningún dato en sí mismo, excepto tal vez un poco de estado local (o tal vez un objeto Transaction
) para ayudar a procesar los objetos de entrada.