Lo que es nn anemia, lo que es nn anemia.

Lo que es nn anemia, lo que es nn anemia.

Este es uno de esos anti-patrones que ha existido desde hace mucho tiempo, sin embargo, parece estar teniendo un brote en particular en el momento. Estaba hablando con Eric Evans en esto, y ambos hemos dado cuenta de que parecen ser cada vez más popular. Como grandes impulsores de un modelo de dominio adecuado. Esto no es bueno.

El síntoma básico de un modelo de dominio anémico es que a primera vista parece que la cosa real. Hay muchos objetos, el nombre de los nombres de dominio en el espacio, y estos objetos están conectados con las relaciones ricas y la estructura que los verdaderos modelos de dominio tienen. La captura se produce cuando nos fijamos en el comportamiento, y te das cuenta de que no hay casi ningún comportamiento de estos objetos, haciéndolos poco más que bolsas de captadores y definidores. De hecho a menudo, estos modelos vienen con reglas de diseño que dicen que son de no poner ninguna lógica de dominio en el dominio de los objetos. En cambio, hay un conjunto de objetos de servicio que capturan toda la lógica de dominio. Estos servicios viven en la parte superior del modelo de dominio y el uso del modelo de dominio para los datos.

El horror fundamental de este anti-patrón es que es tan contrario a la idea básica del diseño orientado a objetos; que es la combinación de datos y el proceso en conjunto. El modelo de dominio anémica en realidad es sólo un diseño del estilo de procedimiento, exactamente el tipo de cosa que se opone fanáticos como yo (y Eric) luchan desde nuestros primeros días en Smalltalk. Lo que es peor, mucha gente piensa que los objetos anémicos son objetos reales, y por lo tanto se pierda por completo el punto de lo orientado a objetos de diseño se trata.

Ahora orientada a objetos purismo está muy bien, pero me doy cuenta de que necesito más argumentos fundamentales contra esta anemia. En esencia, el problema con los modelos de dominio anémicos es que incurren todos los costos de un modelo de dominio, sin ceder ninguno de los beneficios. El costo principal es la torpeza de asignación a una base de datos, que típicamente resulta en toda una capa de mapeo O / R. Esto vale la pena si y sólo si se utilizan las potentes técnicas de OO para organizar una lógica compleja. Al tirar de todo el comportamiento hacia los servicios, sin embargo, que en esencia termina con scripts de transacciones. y por lo tanto pierden las ventajas que el modelo de dominio puede traer. Como ya os comentamos en P de EAA. Modelos de Dominio no siempre son la mejor herramienta.

También vale la pena destacar que poner el comportamiento en los objetos de dominio no debe contradecir el sólido enfoque de utilizar capas para separar la lógica de dominio de cosas tales como la persistencia y la presentación responsabilidades. La lógica que debe estar en un objeto de dominio es la lógica de dominio – validaciones, cálculos, las reglas de negocio – lo que quiera llamarlo. (Hay casos cuando se realiza un argumento para poner fuente de datos o lógica de presentación en un objeto de dominio, pero eso es ortogonal a mi punto de vista de la anemia.)

Una fuente de confusión en todo esto es que muchos expertos OO recomiendo poner una capa de servicios de procedimiento en la parte superior de un modelo de dominio, para formar una capa de servicios. Pero esto no es un argumento para que el modelo de dominio vacío de comportamiento, de hecho, los defensores de la capa de servicios utilizan una capa de servicio junto con un modelo de dominio rico conductualmente.

excelente determinadas por el diseño de libros de dominio de Eric Evans tiene lo siguiente que decir acerca de estas capas.

Capa de aplicación [su nombre de capa de servicios]: Define los puestos de trabajo del software se supone que debe hacer y dirige los objetos de dominio expresivos de resolver los problemas. Las tareas de esta capa es responsable son significativos para el negocio o necesario para la interacción con las capas de aplicación de otros sistemas. Esta capa se mantiene delgada. Que no contiene reglas de negocio o el conocimiento, pero sólo coordina las tareas y los delegados trabajan para colaboraciones de objetos de dominio en la capa siguiente hacia abajo. No tiene estado que refleja la situación de negocios, pero puede tener estado que refleja el progreso de una tarea para el usuario o el programa.

Capa de dominio (o capa del modelo): responsable de representar conceptos de la empresa, información sobre la situación del negocio y reglas de negocio. Estado que refleje la situación de negocio es controlado y utiliza aquí, a pesar de que los detalles técnicos de su almacenamiento se delegan a la infraestructura. Esta capa es el corazón de software de negocios.

El punto clave aquí es que el nivel de servicio es delgada – toda la lógica fundamental radica en la capa de dominio. Se reitera este punto de su patrón de servicio:

Ahora, el error más común es que renunciar con demasiada facilidad en el ajuste de la conducta en un objeto apropiado, deslizando gradualmente hacia la programación de procedimiento.

No sé por qué este anti-patrón es tan común. Sospecho que es debido a muchas personas que realmente no han trabajado con un modelo de dominio adecuado, sobre todo si proceden de un fondo de datos. Algunas de las tecnologías que fomentan; como beans de entidad de J2EE que es una de las razones por las que prefiero modelos de dominio POJO.

En general, cuanto más el comportamiento que se encuentra en los servicios, más probabilidades hay de que robar a sí mismo de los beneficios de un modelo de dominio. Si todo está en su lógica de servicios, se ha robado hasta quedar ciego.

Si has encontrado este artículo útil, por favor compartirlo. Agradezco la respuesta y los ánimos

PUESTOS RELACIONADOS

También te podría gustar...