Primero, antes de que alguien gritara engañado, me costó mucho resumirlo en un título simple. Otro título podría haber sido "¿Cuál es la diferencia entre un modelo de dominio y un modelo MVC?" o "¿Qué es un modelo?"
Conceptualmente, entiendo que un modelo son los datos utilizados por las vistas y el controlador. Más allá de eso, parece haber una gran cantidad de opiniones diferentes sobre lo que compone el modelo. ¿Qué es un modelo de dominio, frente a un modelo de aplicación, frente a un modelo de vista, frente a un modelo de servicio, etc.?
Por ejemplo, en una pregunta reciente que hice sobre el patrón del repositorio, me dijeron a quemarropa que el repositorio es parte del modelo. Sin embargo, he leído otras opiniones de que el modelo debe separarse del modelo de persistencia y la capa de lógica empresarial. Después de todo, ¿no se supone que el patrón Repository desacopla el método de persistencia concreto del modelo? Otras personas dicen que hay una diferencia entre el modelo de dominio y el modelo MVC.
Tomemos un ejemplo sencillo. AccountController que se incluye con el proyecto predeterminado de MVC. He leído varias opiniones de que el código de cuenta incluido es de diseño deficiente, viola SRP, etc., etc. Si uno diseñara un modelo de membresía "adecuado" para una aplicación MVC, ¿cuál sería?
¿Cómo separaría los servicios ASP.NET (proveedor de membresía, proveedor de roles, etc.) del modelo? ¿O lo harías en absoluto?
A mi modo de ver, el modelo debería ser "puro", quizás con lógica de validación ... pero debería estar separado de las reglas de negocio (aparte de la validación). Por ejemplo, supongamos que tiene una regla comercial que dice que alguien debe recibir un correo electrónico cuando se crea una nueva cuenta. Eso realmente no pertenece al modelo en mi opinión. Entonces, ¿a dónde pertenece?
¿Alguien quiere arrojar algo de luz sobre este tema?