¿Cómo eso tiene sentido?
Respuesta corta: no lo hace .
Respuesta más larga: los patrones pesados para desarrollar un modelo de dominio no se aplican a aquellas partes de su solución que son solo una base de datos.
Udi Dahan tuvo una observación interesante que puede ayudar a aclarar esto
Dahan considera que un servicio debe tener algún tipo de funcionalidad y algunos datos. Si no tiene datos, entonces es solo una función. Si todo lo que hace es realizar operaciones CRUD en los datos, entonces es la base de datos.
El objetivo del modelo de dominio, después de todo, es garantizar que todas las actualizaciones de los datos mantengan la invariabilidad comercial actual. O, para decirlo de otra manera, el modelo de dominio es responsable de garantizar que la base de datos que actúa como sistema de registro sea correcta.
Cuando se trata de un sistema CRUD, generalmente no es el sistema de registro de los datos. El mundo real es el libro de registro, y su base de datos es solo una representación local almacenada en caché del mundo real.
Por ejemplo, la mayoría de la información que aparece en un perfil de usuario, como una dirección de correo electrónico o un número de identificación emitido por el gobierno, tiene una fuente de verdad que se encuentra fuera de su negocio: es el administrador de correo de otra persona quien asigna y revoca direcciones de correo electrónico, no tu aplicación Es el gobierno el que asigna los SSN, no su aplicación.
Por lo tanto, normalmente no va a realizar ninguna validación de dominio en los datos que le llegan del mundo exterior; es posible que tenga los controles establecidos para asegurar que los datos está bien formado y debidamente desinfectado ; pero no son sus datos: su modelo de dominio no obtiene un veto.
En un enfoque DDD que usa capas, parece que las operaciones CRUD pasan por la capa de dominio. pero al menos en nuestro caso, esto no parece tener sentido.
Eso es correcto para el caso donde la base de datos es el libro de registro .
Ouarzy lo puso de esta manera .
Sin embargo, al trabajar en un montón de código heredado, observo errores comunes para identificar lo que está dentro del dominio y lo que está afuera.
Una aplicación puede considerarse CRUD solo si no hay una lógica de negocios alrededor del modelo de datos. Incluso en este caso (raro), su modelo de datos no es su modelo de dominio. Simplemente significa que, como no hay ninguna lógica de negocios involucrada, no necesitamos ninguna abstracción para administrarla y, por lo tanto, no tenemos un modelo de dominio.
Usamos el modelo de dominio para administrar los datos que pertenecen al dominio; los datos de fuera del dominio ya se administran en otro lugar, solo estamos almacenando una copia en caché.
Greg Young utiliza los sistemas de almacén como una ilustración principal de soluciones donde el libro de registro está en otro lugar (es decir, el piso del almacén). La implementación que describe es muy parecida a la suya: una base de datos lógica para capturar los mensajes recibidos del almacén y luego una base de datos lógica separada que almacena en caché las conclusiones extraídas del análisis de esos mensajes.
Entonces, ¿tal vez tenemos dos contextos limitados aquí? Cada uno con un modelo diferente para uninvestment account
Tal vez. Sería reacio a etiquetarlo como un contexto limitado, porque no está claro qué otro equipaje viene con él. Puede ser que tenga dos contextos, puede ser uno con diferencias sutiles en el lenguaje ubicuo que aún no ha aprendido.
Posible prueba de fuego: cuántos expertos en dominio necesita dos expertos en dominio para cubrir este espectro, o solo uno que hable sobre los componentes de diferentes maneras. Básicamente, puede adivinar cuántos contextos limitados tiene trabajando la ley de Conway al revés.
Si considera que los contextos limitados están alineados con los servicios, puede ser más fácil: ¿debería poder implementar estas dos funciones de manera independiente? Sí sugiere dos contextos limitados; pero si necesitan mantenerse sincronizados, entonces tal vez sea solo uno.