Cómo hacer que los modelos hagan más que configurar y obtener datos y validación

8

Estoy haciendo esta pregunta porque después de desarrollar algunas pequeñas soluciones de cms personalizadas en un marco, desarrollé la idea de que los modelos pueden sustituirse fácilmente con ORM que facilitan la tarea de validar, obtener y configurar datos, ya que eso es todo lo que se necesitan para .
Hace poco recibí un pedido de una solución compleja de gestión personalizada de clientes. Después de investigar un poco sobre cómo proceder, encontré esto:
http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/

Ahora la idea no es nueva ya que eso es lo que había leído sobre el enfoque MVC, los modelos manejan la lógica de negocios. Pero me resulta difícil planificar un enfoque en el que los Modelos manejen la lógica de negocios y sean clases que estén completas en sí mismas debido al tipo de trabajo al que me he acostumbrado.
Por favor, ayúdenme aquí explicando la idea y señalando algunos ejemplos, artículos, etc.

kapv89
fuente
Buena pregunta. No he pensado en esto antes.
Saeed Neamati
Buen enlace ... ¿qué tecnología de desarrollo está utilizando ... ASP.Net?
Resumen de
Resumen, uso la oveja negra de las tecnologías de desarrollo, php. Sin embargo, se ha vuelto bastante bueno desde 5.3. Solía ​​trabajar en codeigniter, ahora funciona en fuelphp (básicamente un codeigniter para php5.3)
kapv89

Respuestas:

5

Debería leer más sobre el diseño impulsado por dominio . Básicamente intenta capturar los requisitos de la empresa en un modelo puro (en su mayoría modelos de objetos) que puede realizar todas las tareas lógicas empresariales necesarias. Este modelo se puede invocar desde una capa de aplicación (por ejemplo, la vista o el controlador en MVC, en MVP lo llama y lo ajusta para la GUI en un presentador). El modelo también debe ser tan ignorante de la persistencia y otras cosas técnicas como sea posible.

Encapsular la lógica empresarial en un modelo de dominio de este tipo tiene algunas grandes ventajas:

  • Reusabilidad
  • Facilidad de uso y extensión
  • Generalmente conduce a una mejor arquitectura
  • Comunica claramente las coherencias y los requisitos comerciales ...
  • ... y así mejora la comunicación entre desarrolladores, clientes, analistas, etc.

Recomiendo el libro de Eric Evan sobre diseño impulsado por dominio para leer más, ya que lo guiará en la dirección correcta y le dará algunos buenos ejemplos sobre dónde colocar qué lógica. Apuesto a que para cuando lo haya leído, un gran porcentaje de sus entidades contendrá más que datos planos .

Pero me resulta difícil planificar un enfoque en el que los Modelos manejen la lógica de negocios y sean clases completas en sí mismas.

Supongo que, por modelo, se refiere principalmente a entidades en este contexto. Poner lógica / comportamiento empresarial en las entidades no es una tarea trivial. Pero siempre hay que pensar en lo que una entidad es y lo que una entidad lo hace . ¿Tiene algunas responsabilidades o comportamientos? A veces está bien tener entidades planas si los comportamientos o las responsabilidades se expresan mejor como servicios.

Supongamos que tienes un animal. Si bien sus atributos se pueden guardar de manera plana en una base de datos, también tiene cierto comportamiento. Necesita comer Pero un herbívoro no comerá carne, por lo que debe asegurarse de que muestre su comportamiento cuando el programador quiera que consuma carne por la fuerza. Se puede mover y puede hacer su propio ruido único. Estas son algunas cosas que deberían modelarse en la entidad, por ejemplo. Seguro que no dependería de los servicios de procedimiento para hacer que esos animales coman, se muevan o hagan ruido.

Pero todos los ejemplos son superficiales sin un dominio comercial concreto. Por lo tanto, piense en su dominio comercial y en sus entidades, comportamientos y responsabilidades. Un dominio de otro negocio puede contener entidades que se parecen mucho a un extraño, pero de hecho son algo completamente diferente o muestran un comportamiento totalmente diferente. El modelo debe representar ante todo el dominio de sus usuarios lo más preciso posible.

Halcón
fuente
Esa es una respuesta muy informativa. Gracias. Por lo que entiendo, podría necesitar extender las clases de orm para agregar la funcionalidad que podría necesitar, o más bien, definir una segunda capa de modelos sobre la capa ORM que aplica la lógica de negocios a los objetos en los que trabaja. ¿Lo estoy entendiendo bien? (Además, estoy ordenando ese libro de inmediato)
kapv89
No se puede editar más, pero al extender los calsses ORM, me refiero a la extensión de los modelos que representan la base de datos
kapv89
@ kapv89: a veces es mejor ajustar / extender las clases, principalmente para transferencias. Vea el patrón DTO (objeto de transferencia de datos) para obtener más información.
Falcon
He estado pensando en lo que dijiste en tu publicación y leyendo sobre modelos gordos y diseño impulsado por dominios. Creo que ahora tengo una idea sobre cómo llevar a cabo este proyecto. Gracias. También he ordenado ese libro y lo leeré mientras trabajo en este proyecto
kapv89