Me estoy mojando los pies con DDD (en .Net) por primera vez, ya que estoy reorganizando algunos componentes principales de una aplicación empresarial heredada.DDD e implementación de persistencia
Algo que quiero aclarar es, ¿cómo implementamos la persistencia en una arquitectura DDD adecuada?
Me doy cuenta de que los dominios son persistentes ignorantes, y deben diseñarse utilizando el "lenguaje ubicuo" y ciertamente no forzados a las limitaciones del DAC del mes o incluso la base de datos física.
¿Es correcto que las interfaces de repositorio vivan dentro del conjunto de dominio, pero las implementaciones de repositorio existen dentro de la capa de persistencia? La capa de persistencia contiene una referencia a la capa de Dominio, nunca al revés?
¿Desde dónde se llaman mis métodos de repositorio reales (CRUD)?
Estoy de acuerdo con todo lo que Dmitry ha dicho aquí, lo único que añadiría para mayor claridad es que recomendaría su proyecto de cliente/UI hace referencia a una capa de 'Servicios de aplicación', que invoca métodos en el dominio (ya sea dominios agregados o dominio servicios) y llama a los repositorios desde aquí. De esta forma, toda la lógica está contenida dentro de este servicio de aplicación, y usted puede cambiar/agregar interfaces de usuario con poco esfuerzo. –
Solo agregaría una capa de servicio cuando tenga beneficios claros para la aplicación, no solo por el simple hecho de hacerlo. Una capa de servicio es una capa adicional de abstracción de la que en muchos casos puede prescindir. –
@RobinvanderKnaap, eso no es cierto, la capa Application Services es obligatoria en todo momento, en la situación real de desarrollo de software. Si le entrega al equipo de desarrollo de UI la capa de dominio, puede a) no saber cómo usarlo, b) puede usarlo mal. Debe ser explícito sobre lo que la interfaz de usuario puede hacer con su Business API (capa de dominio). –