Objeto de valor único vs entidad

8

Al intentar convertir algunas entidades en objetos de valor, me quedo atascado en un caso en el que lo que parece ser que un objeto de valor debe ser único dentro de un agregado.

Supongamos que tenemos una entidad Película que hace la raíz de un agregado. Esta entidad Película está relacionada con algún conjunto de objetos AdvertisementEvent con la función de mostrar un anuncio en un momento determinado.

AdvertisementEvent contiene un enlace a algunos Banner que deben mostrarse, las coordenadas y algunos filtros de efectos.

Dado que AdvertisementEvent es solo una colección de parámetros de configuración , no estoy seguro de si debería preocuparme por su identidad y tratarla como un objeto de gran valor. Sin embargo, sí me importa que dentro de una Película solo debe haber un AdvertisementEvent en una determinada marca de tiempo, probablemente incluso alrededor de las marcas de hora.

Me resulta difícil dividir mis dudas en múltiples preguntas independientes, así que ahí van:

  1. ¿Una colección de parámetros de configuración suena como un objeto de valor?
  2. ¿Estoy combinando el concepto de singularidad de AdvertisementEvent dentro de Movie y la regla de integridad transaccional?
  3. ¿ alguna de las opciones en el punto (2) implica que AdvertisementEvent debe ser un miembro del agregado de Película ?
  4. ¿Mi objeto AdvertisementEvent es una entidad, un objeto de valor o un objeto de evento? (Utilicé el sufijo Evento en el nombre para resaltar mi confusión)
  5. ¿Los objetos de gran valor como este son un olor de diseño?

Supongo que no estoy tratando con un Evento en el sentido de DDD porque no es algo que simplemente sucede . El evento DDD real debería ser algo más como AdvertisementEventReached

    
pregunta SystematicFrank 03.05.2013 - 12:06

1 respuesta

9

La distinción entre Entidad y Objeto de valor debe basarse en la pregunta: si tengo dos objetos con el mismo contenido (dos AdvertisementEvents vinculados al mismo Banner con el mismos parámetros), ¿debo tratarlos de manera diferente o puedo reemplazar uno por el otro sin afectar el funcionamiento del software?

En este caso, diría que puede reemplazar un AdvertisementEvent por otro con los mismos valores sin afectar el funcionamiento del software. Esto los convierte en objetos de valor (el valor contenido es lo que cuenta, no la identidad del objeto en sí).

En cuanto al tamaño de un objeto de valor: siempre que contenga un conjunto coherente de parámetros para una única responsabilidad, no hay límite sobre el tamaño de un objeto de valor. En la implementación, puede ser bueno prestar especial atención a los objetos de gran valor para garantizar que no se copien innecesariamente y en exceso, pero de lo contrario no es un problema.

En cuanto a las restricciones en el número de AdvertisementEvents que tiene dentro de una Película , esta es una restricción en la relación entre una Película y su colección de AdvertisementEvents , no en una de esas clases individualmente. Como tal, el lugar más lógico para imponer la restricción es en el punto donde la colección se mantiene en Película (por lo tanto, en el método en el que intenta agregar un AdvertisementEvent ).

    
respondido por el Bart van Ingen Schenau 03.05.2013 - 12:46

Lea otras preguntas en las etiquetas