Después de un mes de leer e investigar DDD, decidí comenzar mi propio proyecto y creé DDD con estos contextos limitados>
- Clientela
- Productos
- Pedidos
- Facturación
Cada contexto acotado tiene API de descanso como capa de presentación, capa de dominio, capa persistente.
Hasta ahora todo bien, el código funciona sin problemas, pero como vengo de un mundo monolítico, todavía estoy tratando de resolver lo siguiente:
- cuando quiero crear un nuevo cliente, emitir una nueva factura, crear un nuevo pedido, por ejemplo, quiero acceder a la lista de países. ¿Yo:
a) crear una lista de países en cada BC
b) cree un países BC -> API y úselo para obtener una lista de países disponibles
c) utilice una API de terceros y extraiga datos a través de la capa anticorrupción en cada BC
- al integrarme con API de terceros usando una capa anticorrupción o una capa adaptadora, ¿qué datos se deben incluir en mi modelo de dominio? Por ejemplo, si quiero integrar una API de zendesk con un cliente BC. ¿Necesito solo un ticketID en mi dominio, o tengo que extraer todos los datos de Zendesk a los que quiero acceder y usar en un Client BC?
Si mi aplicación MVC realmente está obteniendo datos de las API (capas de presentación de mis contextos limitados), me resulta muy difícil definir claramente los límites de cada BC. ¿Significa que un BC correctamente diseñado serviría a un solo controlador MVC sin la necesidad de consumir API adicionales?
fuente
Respuestas:
Si sus diferentes contextos limitados entienden el significado / propósito de un país de manera diferente, entonces necesita modelarlo apropiadamente diferente en cada uno. Sin embargo, si estamos hablando simplemente de datos de referencia de códigos y nombres ISO, entonces creo que es bastante justo y estándar guardarlo donde sea conveniente y hacerlo accesible a todas las partes interesadas. Por ejemplo: una base de datos, un archivo de configuración, un servicio web, etc.
También quería mirar tu modelo un poco. Las piezas que ha enumerado podrían ser "entidades" en un "contexto limitado", dependiendo de la estructura de la empresa. Los BC a menudo terminan siendo definidos alrededor de diferentes áreas / departamentos / equipos, ya que ese es con frecuencia el límite natural entre el "lenguaje ubicuo". Entonces, por ejemplo, en lugar de Ventas / Productos / Pedidos, esperaría que los BC estén en la línea de Ventas / Fabricación / Almacenamiento.
Dentro de esos BC, no te enfocas en los sustantivos. Se enfoca en los casos de uso y crea modelos de los sustantivos que pueden cumplir con los casos de uso. Los métodos en una "raíz agregada" ejecutan casos de uso y realizan los cambios apropiados en los modelos relacionados.
También tenga en cuenta que cada BC puede usar un sistema o arquitectura completamente diferente. Un BC dado puede no merecer el uso de "componentes de software DDD" en absoluto, y la mayoría de ellos probablemente no. DDD tiene menos que ver con componentes de software prescriptivos y más con el proceso de diseño de software. El punto es enfocarse en comprender los contextos limitados de la compañía, mapear los lenguajes ubicuos de cada contexto y modelar el código para ese contexto usando su lenguaje ubicuo. De esa manera, cuando interactúa con los interesados y hace referencia al código, les parece que está hablando en términos comerciales que ellos entienden. Y reconociendo que la misma palabra tiene diferentes significados en diferentes AC.
Hay patrones específicos generados por DDD (por ejemplo, repositorio, capas específicas, etc.) que son medios para un fin. Pero no se garantiza que estos patrones sean los mejores patrones para cada caso, incluso dentro de DDD. Al igual que DDD no es "la" respuesta para cada proyecto. Solo tiene que hacer lo que su análisis sugiere que es lo más práctico.
fuente
A partir de sus preguntas, creo que entiende mal el contexto limitado. Es posible que desee volver a leer el Capítulo 14 del libro azul .
Intentando responder en general: debe tener cuidado al compartir conceptos entre dos contextos limitados diferentes. Después de todo, parte de la razón por la que existe el límite es que el lenguaje omnipresente cambia. Asumir que los mismos datos (y la misma representación) de una entidad pueden usarse en ambos contextos es ingenuo: puede ser correcto, puede ser incorrecto, pero no hay una buena manera para aquellos de nosotros en el exterior, sin acceso a sus expertos de dominio, para juzgar.
Por ejemplo, en el dominio del cliente, "país" podría estar relacionado con la residencia o la ciudadanía. En la facturación, puede estar relacionado con los tipos de cambio de divisas. En algunos de esos dominios, es posible que deba preocuparse por las tarifas y similares.
Una segunda pregunta que debe plantear es cuál de sus modelos es el libro de registro de los datos "compartidos". En el caso de "país", ¡la respuesta correcta es probablemente que ninguno de ellos lo es! La topología geopolítica no está controlada por su modelo.
¿Qué se supone que debe suceder en sus modelos de dominio cuando un país está ocupado por una potencia extranjera?
Tenga en cuenta; muchos de nosotros estamos acostumbrados a pensar en la estructura de datos; ¿Cuál es la relación entre un dato y otro? Y eso es excelente cuando considera los informes y trata de asegurarse de que todos los datos que necesita hayan sido recopilados por su solución. Pero los modelos de dominio no son solo sobre estructura, sino sobre cambio. También debe prestar atención a esa parte y asegurarse de que comprende bien cómo los datos restringen los cambios (y cómo esas restricciones varían de un contexto acotado a otro).
fuente
Los conceptos que menciona (Clientes, Productos, Pedidos, Facturación) generalmente se representan en un solo Modelo de dominio y, por lo tanto, en Contexto acotado. Le sugiero que esté entendiendo estos conceptos incorrectamente.
fuente
Mi opinión sobre este tema es definir el contexto acotado utilizando un mapeo de capacidad empresarial u otras técnicas similares como el análisis de la cadena de valor. Se reduce a los siguientes pasos:
Entonces, el enfoque inicial está en cómo opera su negocio.
Par de consejos prácticos:
Con este enfoque, terminará con servicios altamente autónomos, mantenibles y confiables. Es posible que desee consultar un ejemplo de definición de límites de contexto.
fuente