2012-04-26 6 views
5

Estoy trabajando en una aplicación donde los usuarios pueden seguir el uno al otro, de manera similar a Twitter.DDD: ¿Los objetos de conexión son objeto de entidad u objeto de valor?

Después de leer en DDD, entiendo que mis usuarios son objetos de entidad; me refiero a ellos utilizando su identificación única.

Cuando un usuario 'sigue' a otro (es decir, forma una conexión), la relación se almacena en una tabla de muchos a muchos. Sus campos incluyen FollowerID, TargetID y Status. Solo puede haber dos registros para cada combinación de seguidor/objetivo (uno activo, el otro inactivo), por lo que puedo identificar objetos de forma segura en función de sus atributos.

Por lo tanto, creo que mis objetos de conexión son objetos de valor, no objetos de entidad, pero no estoy seguro. ¿Me pueden ayudar con esta decisión?

Respuesta

4

Tiene la razón de que las entidades son únicas y tienen la noción de tener una identidad (es decir, solo puede existir un usuario único). Un Connection depende de otras entidades User. Representa algún aspecto entre dos usuarios. Ese aspecto es si hay una conexión activa o inactiva. Sin contener los datos a los que se conectan los usuarios, una conexión no tiene identidad. Incluso puede tener su propia clave principal en la base de datos, pero desde la perspectiva del dominio, no tiene identidad propia.

Por lo tanto, yo diría que Connection es un valor objeto.


para mantener a mi conclusión, Microsoft.Net Architecting Applications for the Enterprise, página 187, dice: clase de objeto

Un valor representa una entidad en el dominio que sobre todo contiene datos y vive de los datos que contiene. Un objeto de valor es completamente identificado por una combinación de valores que contiene. Un objeto entidad , por otro lado, tiene su propia vida y un rico comportamiento independientemente de los datos que contiene. Los objetos de entidad suelen ser objetos con una vida útil más larga. Un objeto de valor representa un aspecto de una entidad y solo puede vivir en relación con una entidad.

Y también en la página 189: Se necesita

Un comentario adicional para explicar la diferencia entre entidades y objetos de valor. No necesita un repositorio o un correlacionador de datos para un objeto de valor. Necesita un repositorio solo para una entidad. El repositorio (o el asignador) para una entidad dada sin duda tomará cuidado de todos los objetos de valor que dependen de una entidad dada.

+0

"Sin que contiene los datos de los cuales los usuarios se conectan, una conexión no tiene identidad" - La conexión es única para una combinación de FollowerID y targetID. Entonces, si tenemos un TaregtID y FollowerID que creo que son userids, podemos identificar una conexión. Entonces, ¿cómo no es un objeto de entidad? –

+0

@HariSubramaniam, otra manera de decirlo es que [este sitio] dice (http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/) , "Un objeto de valor no puede vivir solo sin una entidad". Ciertamente, no siempre es fácil determinar cuál es cuál, pero después de pensar sobre esto e investigarlo, me estoy inclinando fuertemente hacia que sea un objeto de valor. – Matt

2

Hace algún tiempo, vi una caricatura sobre un científico que había inventado la clonación. Cada vez que se clonaba a sí mismo, destruía la versión anterior. Entonces la persona que estaba viendo la demostración decidió interrumpir y sabotear la parte de destrucción, por lo que había dos científicos. La historieta terminó con un interrogatorio existencial interesante.

Valores versus entidades no se trata de tener o no tener campos de Id. En una u otra forma. El punto es cómo estamos mirando esos objetos a través de nuestra perspectiva de dominio.Si son objetos de valor, entonces solo importa su valor: el 1. °, 3. ° y 53. ° científico son lo mismo. Si nos preocupamos por la identidad, si pensamos que la clonación del tercer científico nunca será como la primera, entonces nuestro objeto es una entidad.

Cuestiones relacionadas