Pregunta

Actualmente estoy determinar las entidades, objetos de valor y agregados en un sistema. Dicen que las siguientes entidades han sido identificados:

Cliente, CustomerEmail, correo electrónico, CustomerAddress, dirección, AddressType

donde Clientes -> Mensajes de correo electrónico es una de muchos a muchos, como es Clientes -> Direcciones (con un tipo de dirección). Estas relaciones se representan por los objetos de relación CustomerAddress y CustomerEmail.

Al principio pensé que esto era sencillo:

Entidades: Cliente, CustomerEmail, CustomerAddress Objetos de valor: correo electrónico, dirección, AddressType

con ser un cliente la raíz agregado de un agregado que contiene todas las Entidades y del VO anteriormente.

El problema que tengo (y esto sólo puede ser como yo estoy aprendiendo sobre los conceptos de agregados a medida que avanzo hacia adelante) que usted tiene un Proveedor Entidad que los espejos lo anterior agregada al cliente, utilizando la misma dirección de correo electrónico y el valor de los objetos. En este caso, cuando un cliente se elimina la dirección de correo electrónico y no debe suprimirse, como proveedor, o incluso otro cliente todavía puede hacer referencia a ellos. He visto una gran cantidad de documentación que sugiere cuando se elimina un agregado, todo dentro del límite agregado sea borrado todos a la vez. Estoy en lo cierto al suponer que esto no se aplica a los objetos de valor en su conjunto (es decir. Ellos son inmutables ... si tuviéramos un objeto de color verde en un agregado de vehículo ... que no se elimine el color sólo porque un coche fue eliminado) o debe ser el correo electrónico y dirección como dos direcciones allí propias entidades (y agregados), a pesar de que pueden tener los mismos atributos, son identidades separadas reales (es decir. una es una dirección del proveedor, la otra dirección de un cliente?)

Por último, si son de hecho Valor Objetos, ¿cómo hace uno para manejar el caso en que deberán ser eliminados (No hay proveedores o clientes permanecen referencia a una dirección) si VO solamente se puede actuar a través de su raíz agregada?

Saludos,

Steve

¿Fue útil?

Solución

Usted está pensando acerca de su dominio en termias de su base de datos. Esto no es recomendable.

  

Proveedor Entidad que los espejos lo anterior agregada al cliente

Esto sugiere que se echa en falta un concepto en su dominio. ¿Qué dice este "espejo" significa para el experto del dominio? Si es que hay una relación entre ellos debe ser modelada de forma explícita.

Usted dice que "los clientes -> Los correos electrónicos es una relación muchos a muchos". Es significativo para su dominio que un correo electrónico es compartida por múltiples clientes? Si es así que una vez más es probable que esté perdiendo un concepto. Compruebe lo que el experto del dominio tiene que decir acerca de esta relación. Si en realidad no es de muchos a muchos, pero uno a muchos que tal vez el correo electrónico es un objeto de valor que la entidad de cliente "posee". Ahora bien, si el cliente posee la dirección de correo electrónico o se puede eliminar (o actuar sobre él) sin ninguna restricción.

Una de las cosas más difíciles acerca de la DDD es que siempre terminan tratando de entidades comparten entre los agregados. no lo hacen. Usted derrota el punto agujero de un agregado - el límite consistencia. En cambio, con la ayuda de su experto de dominio identificar los conceptos que faltan y que se aclaren los límites entre los AR.

Sé que todo el sonido abstracto (i he pedido a preguntas de este tipo en el pasado) pero la verdad es que sólo usted experto en el campo puede ayudar a modelar el dominio mejor.

Y como último consejo - re (-RE X 100) leer el libro de Eric Evans por lo general ayuda:)

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