Pregunta

Estoy tratando de conseguir mi cabeza alrededor de cómo utilizar correctamente el patrón de repositorio. El concepto central de una raíz agregada sigue apareciendo. Cuando se busca tanto la web como desbordamiento de la pila para obtener ayuda con lo que es una raíz agregada, sigo encontrando discusiones acerca de ellos y enlaces a páginas muertas que se supone que contienen definiciones de base.

En el contexto del modelo de repositorio, ¿Qué es una raíz agregada?

¿Fue útil?

Solución

En el contexto del modelo de repositorio, raíces agregados son los únicos objetos de sus cargas de código de cliente desde el repositorio.

El repositorio encapsula el acceso a los objetos secundarios - desde la perspectiva de la persona que llama que les carga automáticamente, ya sea al mismo tiempo se carga la raíz o cuando son realmente necesarios (como ocurre con la carga diferida)

.

Por ejemplo, puede que tenga un objeto que encapsula Order operaciones en varios objetos LineItem. Su código de cliente nunca cargaría los objetos LineItem directamente, sólo el Order que los contiene, lo que sería la raíz agregado para esa parte de su dominio.

Otros consejos

A partir de Evans DDD:

  

Un agregado es un conjunto de objetos asociados que tratamos como una unidad con el propósito de los cambios de datos. Cada agregado tiene una raíz y un límite. El límite define lo que está dentro del agregado. La raíz es una sola, entidad específica contenida en el agregado.

Y:

  

La raíz es el único miembro del agregado que objetos exteriores se les permite mantener las referencias a [.]

Esto significa que las raíces de agregado son los únicos objetos que se pueden cargar desde un repositorio.

Un ejemplo es un modelo que contiene una entidad Customer y una entidad Address. Nosotros nunca acceder a una entidad Address directamente del modelo, ya que no tiene sentido sin el contexto de un Customer asociado. Así que podríamos decir que Customer y Address juntos forman un agregado y que Customer es una raíz agregado.

raíz agregada es un nombre complejo para idea simple.


Idea general

diagrama de clases

Bien diseñado encapsula su funcionamiento interno. Punto a través del cual se accede a esta estructura se llama aggregate root.

 introducir descripción de la imagen aquí

Internals de su solución puede ser muy complicado, pero el usuario de esta jerarquía se acaba de utilizar root.doSomethingWhichHasBusinessMeaning().


Ejemplo

Marque esta jerarquía de clases sencilla introducir descripción de la imagen aquí

¿Cómo desea montar su coche? Eligió mejor api

Opción A (que sólo funciona de alguna manera):

car.ride();

Opción B (usuario tiene acceso a inernals de clase):

if(car.getTires().getUsageLevel()< Car.ACCEPTABLE_TIRE_USAGE)
    for (Wheel w: car:getWheels()){
        w.spin();
    }
}

Si cree que la opción A es mejor que felicitaciones. Se obtiene razón principal detrás de aggregate root.


raíz agregada encapsula múltiples clases. se puede manipular la jerarquía entera sólo a través objeto principal.

Imagine que tiene una entidad de ordenador, esta entidad también no puede vivir sin su entidad de software y hardware entidad. Estos forman el agregado Computer, el mini-ecosistema para la parte de la computadora del dominio.

Agregada raíz es la entidad nodriza dentro del agregado (en nuestro caso Computer), es una práctica común tener su repositorio sólo funcionan con las entidades que son las raíces de agregados, y esta entidad es responsable de la inicialización de las otras entidades.

Considere agregado Root como un punto de entrada a un agregado.

En C # código:

public class Computer : IEntity, IAggregateRoot
{
    public Hardware Hardware { get; set; }
    public Software Software { get; set; }
}

public class Hardware : IEntity { }
public class Software : IValueObject { }

public class Repository<T> : IRepository<T> where T : IAggregateRoot {}

Tenga en cuenta que el hardware es probable que sea un ValueObject también (no tienen identidad por sí mismo), considerarlo como sólo un ejemplo.

Si sigue un enfoque de base de datos en primer lugar, que la raíz agregada es generalmente la tabla 1 en la ladera de una 1-muchos relación.

El ejemplo más común es una Persona. Cada persona tiene muchas direcciones, recibos de uno o más de pago, facturas, entradas de CRM, etc. No siempre es el caso, pero 9/10 veces lo es.

Actualmente estamos trabajando en una plataforma de comercio electrónico, y básicamente tiene dos raíces agregadas:

  1. Los clientes
  2. Vendedores

Información de contacto de clientes de suministro, asignamos transacciones a ellos, las transacciones reciben artículos de línea, etc.

Vendedores vender productos, tienen las personas de contacto, sobre nosotros páginas, ofertas especiales, etc.

Estos son atendidos por el cliente y el vendedor repositorio respectivamente.

A partir de una enlace roto :

dentro de un agregado no es una raíz agregada. La raíz agregada es la entidad matriz de todas las demás entidades y el valor de los objetos dentro del agregado.

A Repositorio opera sobre una raíz de agregado.

Más información también se puede encontrar aquí .

Dina:

En el contexto de un Repositorio de la raíz agregada es una Entidad sin Entidad matriz. Contiene cero, una o varias entidades secundarias cuya existencia depende del Padre por su identidad. Esa es una relación de uno a muchos en un repositorio. Esas entidades secundarias son agregados de civil.

 introducir descripción de la imagen aquí

Agregada : la recogida de algo.
root es como nodo superior del árbol, desde donde se puede acceder a todo como nodo en el documento <html> página web.
Blog Analogía, un usuario puede tener muchos puestos y cada poste puede tener muchos comentarios. por lo que si buscamos a cualquier usuario entonces puede actuar como root para acceder a todos los mensajes relacionados y otras observaciones de esos puestos. Estos están todos juntos dice que son colección o Agregada

agregada es donde a proteger sus invariantes y la fuerza consistencia al limitar su acceso pensó raíz agregado. No se olvide, agregado debe diseñar en sus reglas de negocio de proyectos e invariantes, no de relación de base de datos. No debe inyectarse cualquier repositorio y no hay consultas no están permitidos.

En Erlang no hay necesidad de diferenciar entre los agregados, una vez que el agregado está compuesto por estructuras de datos dentro del estado, en lugar de composición OO. Ver un ejemplo: https://github.com/bryanhunter/cqrs-with -erlang / árbol / NDC-londres

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top