asp.net mvc - ventajas - ¿Dónde están las Reglas de negocios en MVC?
tag helpers asp net core (9)
Ahora que todos hablan de MVC, me doy cuenta de que no se están abordando las reglas comerciales. En los viejos tiempos de la arquitectura de 3 niveles, las reglas de negocios estaban en la capa intermedia. ¿Dónde caen en el nuevo MVC?
¿Hay alguna razón por la cual no puedes mezclar MVC y Ntier? Nuestra aplicación hace precisamente eso. Nuestros controladores se utilizan para la validación de datos y deciden a qué Business Layer llama.
OurApp.Web - Proyecto Asp.net MVC
OurApp.Business - Business Layer Library
OurApp.DataAccess - Biblioteca de la capa de datos
OurApp.Entities - Básicamente todos los ''modelos'' compartidos por todas las capas
Creo que el problema es una cuestión de definición. Me parece que la lógica para presentar las pantallas en el orden necesario es un problema de controlador y he visto algunos proyectos que usan un motor de reglas para determinar el orden y qué entrada es necesaria del usuario. Esto no es lo mismo que las reglas de negocios imho.
En un primer momento, diría que pertenecen al modelo. El MVC Entry en Wikipedia parece estar de acuerdo: "En MVC, el modelo representa la información (los datos) de la aplicación y las reglas de negocio utilizadas para manipular los datos". Después de todo, nos referimos a "reglas empresariales", los algoritmos funcionales y la lógica que codifica el dominio con el que está involucrada su aplicación, a diferencia de la lógica relacionada con la entrada / salida. Esta lógica central relacionada con el negocio no cambia, o no debería, según lo que se muestra al usuario (que es el dominio de la Vista) o la entrada del usuario (que es recibida principalmente por el Controlador).
En mi experiencia, hacer este tipo de preguntas ha sido muy revelador durante el proceso de desarrollo de software: encontramos una gran cantidad de cosas que algunas personas consideraban como ''reglas de negocios'', pero que resultaron ser otra cosa. Si no es una regla comercial verdadera, es posible que no pertenezca al modelo.
Esta es una pregunta publicada antiguamente, pero me gusta que un repositorio de reglas sea completamente independiente de cualquier parte de una aplicación. Varias aplicaciones, implementaciones múltiples de un nivel empresarial, deberían poder acceder a una representación estática de un repositorio de reglas de negocio. Las simples decisiones de separación como esta hacen que la migración del escritorio -> web, por ejemplo, sea trivial.
En mi arquitectura, Vista -> Modelo -> Controlador -> Nivel de negocio -> Registros de repositorio, es decir, el controlador accede a los datos bastos presentados por el nivel / capa de negocio, los alimenta al modelo que los masaja en un formato presentable, y el ver pasivamente lo muestra. El nivel de negocio, que se puede reutilizar en cualquier formato de presentación, tendrá reglas explícitas y acceso a un subsistema con reglas implícitas. Por diseño, cada componente ignora los detalles de un componente sobre el mismo.
La razón por la que nunca ves las "Reglas de negocio" de la dirección MVC es que MVC en general es un patrón de presentación. Está enfocado en cómo estructurar su aplicación. El Modelo, por ejemplo, puede considerarse como un modelo de presentación. El modelo de su aplicación, que la vista luego representa.
Sin embargo, para crear el modelo de presentación, generalmente necesita ir a los modelos de su dominio donde vive toda su lógica comercial. En ese momento, MVC no dictamina dónde vive ese código físicamente. ¿Está en otro nivel? MVC no le importa.
Las reglas comerciales deben estar en el modelo, NO en el controlador. El controlador y la vista son parte de la capa de presentación.
El modelo representa las entidades y la funcionalidad del dominio.
El controlador es simplemente un administrador para tomar las entradas y solicitudes del usuario, realizar acciones en / sobre el modelo y asignarlo a las vistas en la capa de presentación. El controlador no es solo un mediador, la vista O el controlador puede actuar sobre el modelo.
Las reglas comerciales siempre viven en el modelo. El modelo es el bit que podrías reutilizar con una interfaz de usuario completamente diferente. La vista es obviamente completamente dependiente de las opciones de IU y el controlador debe tomar datos del modelo y decirle a la vista que lo renderice.
Poner lógica empresarial en la vista es mala porque vincula la estructura a la presentación.
Poner lógica de negocios en el controlador es malo porque divide el dominio de su negocio entre los datos que persisten en el modelo y las reglas en el controlador.
Una cita de un artículo de Wikipedia:
MVC se ve a menudo en aplicaciones web, donde la vista es la página HTML real, y el controlador es el código que reúne datos dinámicos y genera el contenido dentro del HTML. Finalmente, el modelo está representado por el contenido real, generalmente almacenado en una base de datos o en nodos XML, y las reglas comerciales que transforman ese contenido en función de las acciones del usuario.
Ustedes están equivocados, las reglas del negocio viven dentro del controlador y no del modelo ...