2010-02-14 23 views
9

He estado estudiando DDD durante las últimas 2 semanas, y una de las cosas que realmente me llamó la atención es cómo las raíces agregadas pueden contener otras raíces agregadas. Las raíces agregadas se recuperan del repositorio, pero si una raíz contiene otra raíz, ¿tiene el repositorio una referencia al otro repositorio y le pide que cree la subroca?DDD: obtención de raíces agregadas para otros agregados

+0

¿Es un diseño controlado por el dominio? ¿Miraste el patrón de diseño compuesto? – philant

Respuesta

0

De mi opinión depende - Tengo el mismo escenario y la forma en que trato esto es a través del ORM que estoy usando - nHibernate.

Tengo asignaciones para todas mis entidades de las cuales varias son raíces agregadas y una de estas tiene varias otras raíces agregadas como variables miembro. El repositorio para esta raíz agregada compuesta no requiere referencias a otros repositorios raíz agregados porque nHibernate sabe cómo obtener todos los datos necesarios (a través de las asignaciones).

HTH

AWC

1

El repositorio no construye, sino que almacena. Cuando usa ddd, es posible que desee familiarizarse con los patrones de persistencia básicos, como unidad de trabajo, mapa de identidad, carga diferida, correlacionador de relaciones de objeto, objeto de consulta, proxy (dinámico). (Estos patrones no tienen nada que ver con ddd, pero son muy útiles para saber). El repositorio es solo una fachada para ocultar la implementación de los patrones mencionados anteriormente y para abstraer el acceso a los datos de una manera controlada por el dominio. La mayoría de las personas no escribe manualmente su infraestructura de persistencia de forma manual hoy en día, especialmente cuando usa ddd, es posible que desee ver un orm.

La referencia real con el código que convierte los registros de la base de datos en un objeto estará en el mapeador de datos. Habrá referencias entre clases de mapeo en las clases de mapeo, o creadas por algo así como mapperfactory.

public interface IDataMapper<T> 
{ 
    T Map(IDataReader reader); 
} 

Usted no tiene que implementar este código usted mismo, sólo tiene que utilizar una herramienta que lo hace por usted y tratar de comprender cómo las partes del código en la herramienta (ORM) trabaja. El ddd puro sin orm es casi imposible sin un buen conjunto de herramientas que le evite escribir mucho código.

2

@Paco: Estás equivocado. Los repositorios no son solo para almacenar objetos. Si ha leído el libro DDD de Eric Evan, sabría que los repositorios son como una representación de datos en memoria orientada a objetos. Puede usar un objeto de repositorio de la misma manera que usa una colección. Puede usar el indexador para obtener o establecer objetos, puede usar el método Add() para agregar un nuevo objeto, puede usar el método Remove() para eliminar un objeto, etc.

El repositorio usa la infraestructura para leer/escribir datos desde/hacia la base de datos. Puede usar un DataMapper para simplificar la recuperación de datos de su base de datos relacional y la asignación a sus Entidades.

Cuestiones relacionadas