java - mvc - Objetos/servicios de dominio y la Capa lógica de negocios
mvc java web ejemplo (4)
¿Qué son los objetos de dominio y los servicios de dominio en la arquitectura de software? No estoy familiarizado con ellos o cómo difieren de la capa de lógica de negocios?
Diferentes personas usan estos términos de maneras algo diferentes, pero esta es mi opinión:
1) "Negocio" y "dominio" son aproximadamente sinónimos. "Dominio" es un poco más general en el sentido de que no asume que estás escribiendo una aplicación comercial. Entonces, si estuviéramos escribiendo una aplicación científica o un juego, podríamos preferir referirnos a la parte relevante del código como código de "dominio" en lugar de código "comercial". Entonces en el resto de esta explicación usaré "dominio" ya que es más general.
2) "Lógica de dominio" comprende tanto "objetos de dominio" como "servicios de dominio". Por varias razones (técnicas y de otro tipo), muchas arquitecturas emplean un diseño donde la lógica de dominio se divide en objetos para almacenar datos ("objetos de dominio") y objetos que los manipulan ("servicios de dominio"). Martin Fowler y otros han señalado que eso no es muy OO, ya que una gran parte del concepto de OO es combinar la funcionalidad con los datos, y eso es correcto, pero es lo que es. Los objetos de dominio son los datos y los servicios de dominio son la parte de hacer cosas con los datos.
3) En el diseño impulsado por dominio, la idea es volver al diseño OO verdadero, y entonces los diversos métodos de servicio vuelven a los objetos de dominio para que tenga objetos en el sentido OO en lugar de lo que a veces se llama "anémico" " objetos. En una DDD, los objetos de dominio son más robustos y forman la lógica de dominio. En realidad, es posible que todavía existan algunos servicios de dominio, pero esto es típicamente más pequeño en un DDD que en un modelo de objetos de dominio más tradicional frente a los servicios.
La Capa lógica de negocios también se llama capa de dominio. Esta es la capa / nivel que maneja toda la lógica comercial.
Los objetos de dominio y los servicios de dominio son clases que usa para construir su capa de dominio.
Necesitamos entender las responsabilidades de la capa de aplicación y la capa de dominio (empresarial) para poder captar la diferencia. La capa de dominio representa los objetos comerciales, principalmente las entidades del negocio, posiblemente abstraídas hasta cierto punto, y los servicios de dominio. La capa de dominio solo cambia cuando el negocio cambia o el contexto del dominio cambia dentro del negocio. La capa de aplicación "vive" encima de la capa de dominio y a menudo (preferiblemente) se separa de la capa de dominio, como en una aplicación web MVC asp.net donde la parte del controlador es la capa de aplicación y la parte HTML es la capa de presentación. La capa de aplicación cambia para adaptarse al propósito de esa aplicación específica (o servicio, API, aplicación, etc.)
Permítanme ofrecer este ejemplo de un escenario de aplicación empresarial con el que he trabajado, para explicar por qué un nivel de dominio y un nivel de negocios contienen lógica de negocios pero son diferentes.
Supongamos que tengo un producto COTS que es un motor puro Case Management, digamos una implementación OMG CMMN. Un montón de lógica empresarial en un nivel empresarial que funciona con un grupo de entidades del nivel de datos.
Ahora continúe suponiendo que tengo dos clientes que son integradores de sistemas, uno está construyendo un sistema de administración de casos legales y uno que quiere administración de casos de atención médica. ambos son administración de casos, pero tienen sus propios términos de dominio, objetos, procedimientos, arquitecturas industriales, etc.
Cada uno agregará su propio nivel de dominio, para que puedan trabajar en los términos y conceptos del dominio comercial respectivo.
Entonces, sí, contiene lógica comercial, pero un nivel de dominio es una forma de encapsular un negocio genérico reutilizable con un negocio específico.
Cuanto más "simple" sea la aplicación, más similar es el modelo de dominio y el modelo de datos, y la lógica de negocios y la lógica de dominio. Pero cuando aumenta la ''utilidad'' de un componente, al final las preocupaciones se separan.