Derik Whitaker publicó un artículo hace un par de días que llegó a un punto sobre el que he sentido curiosidad durante algún tiempo: ¿ debería existir la lógica empresarial en los controladores?
Hasta ahora, todas las demostraciones de ASP.NET MVC que he visto ponen el acceso al repositorio y la lógica empresarial en el controlador. Algunos incluso lanzan validación allí también. Esto da como resultado controladores bastante grandes e hinchados. ¿Es esta realmente la forma de usar el marco MVC? Parece que esto va a terminar con una gran cantidad de código duplicado y lógica repartida entre diferentes controladores.
asp.net-mvc
design-patterns
controller
business-logic
Kevin Pang
fuente
fuente
Respuestas:
La lógica empresarial realmente debería estar en el modelo. Deberías apuntar a modelos gordos, controladores delgados.
Por ejemplo, en lugar de tener:
Yo preferiria tener:
Esto supone que los impuestos los calcula un servicio externo y requiere que su modelo conozca las interfaces con sus servicios externos.
Esto haría que su controlador se viera así:
O algo así.
fuente
Me gusta el diagrama presentado por Microsoft Patterns & Practices . Y creo en el adagio "Una imagen vale más que mil palabras".
fuente
Ésta es una pregunta fascinante.
Creo que es interesante que una gran cantidad de aplicaciones MVC de muestra en realidad no sigan el paradigma MVC en el sentido de colocar verdaderamente la "lógica empresarial" por completo en el modelo. Martin Fowler ha señalado que MVC no es un patrón en el sentido de Gang Of Four. Más bien, es paradigma de que el programador debe añadir patrones a si se están creando algo más allá de una aplicación de juguete.
Entonces, la respuesta corta es que la "lógica de negocios" no debería vivir en el controlador, ya que el controlador tiene la función adicional de lidiar con la vista y las interacciones del usuario y queremos crear objetos con un solo propósito.
Una respuesta más larga es que necesita pensar un poco en el diseño de la capa de su modelo antes de mover la lógica del controlador al modelo. Quizás pueda manejar toda la lógica de la aplicación usando REST, en cuyo caso el diseño del modelo debería ser bastante claro. Si no es así, debe saber qué enfoque va a utilizar para evitar que su modelo se hinche.
fuente
Puede consultar este increíble tutorial de Stephen Walther que muestra Validación con una capa de servicio .
fuente
La lógica empresarial no debe estar contenida en controladores. Los controladores deben ser lo más delgados posible, idealmente seguir el patrón:
Además, los controladores pueden contener cierta lógica de aplicación.
Entonces, ¿dónde pongo mi lógica empresarial? En modelo.
¿Qué es el modelo? Esa es una buena pregunta. Consulte el artículo Patrones y prácticas de Microsoft (felicitaciones a AlejandroR por su excelente hallazgo). Aquí hay tres categorías de modelos:
Por supuesto, MVC es un paradigma que se presenta en diferentes variedades. Lo que describo aquí es MVC que ocupa solo la capa superior, vea este artículo en Wikipedia
fuente
Si usa inyectores de dependencia, su lógica de negocios irá a ellos y, por lo tanto, obtendrá controladores limpios y ordenados.
fuente