2010-02-16 57 views
9

Dado que no hay repositorios para objetos de valor. ¿Cómo puedo cargar todos los objetos de valor?¿Cómo se guardan y se cargan los objetos de valor?

Supongamos que estamos modelando una aplicación de blog y tenemos estas clases:

  • Post (entidad)
  • Comentarios (Objeto de valor)
  • Tag (Objeto de valor)
  • PostsRespository (Repositorio)

Sé que cuando guardo una nueva publicación, sus etiquetas se guardan con ella en la misma tabla. Pero ¿cómo podría cargar todas las etiquetas de todas las publicaciones? ¿Debería PostsRespository tener un método para cargar todas las etiquetas? Normalmente lo hago, pero quiero saber otras opiniones

Respuesta

8

Busco una mejor solución para esta pregunta y me encontré con este post:

http://gojko.net/2009/09/30/ddd-and-relational-databases-the-value-object-dilemma/

Este post explica muy bien por qué existe mucha confusión con objetos de valor y bases de datos. Aquí está la frase que me gusta mucho: "persistencia no es una excusa para convertir todo a entidades"

Gojko Adzic, nos dan tres alternativas para salvar nuestros objetos de valor .

+0

Las bases de datos relacionales y los ORM a menudo nos engañan para crear entidades accidentales http://www.jefclaes.be/2013/05/accidental-entities-you-dont-need-that.html – JefClaes

+0

gracias por el enlace – yeraycaballero

+0

@yeraycaballero Si guardo objeto de valor en una columna de texto (opción 3), ¿cómo debo hacer para realizar una actualización atómica en el objeto de valor? –

3

Actualmente estoy trabajando con un ejemplo similar. Una vez que necesita referirse de forma única a las etiquetas, no son objetos de valor simple y pueden seguir creciendo en complejidad. Decidí convertirlos en sus propias entidades y crear un repositorio separado para recuperarlas. En la mayoría de los escenarios, se cargan o guardan con la publicación, pero cuando se requieren solos, se usa el otro repositorio.

Espero que esto ayude.

EDITAR: En parte gracias a esta publicación decidí reestructurar mi aplicación un poco. Tienes razón en que probablemente estaba convirtiendo incorrectamente las etiquetas en una entidad. Desde entonces, he cambiado mi aplicación para que las etiquetas solo sean cadenas y el repositorio posterior maneje todos los requisitos de almacenamiento alrededor de las etiquetas. Para las operaciones que necesitan publicaciones, las etiquetas se cargan con ellas. Para cualquier operación que solo requiera etiquetas o listas de etiquetas, el repositorio tiene métodos para eso.

+0

Gracias por la respuesta. Entonces tienes un TagsRepository. ¿También tienes una tabla de etiquetas en la base de datos? – yeraycaballero

+0

En realidad, todavía no me decidí por la base de datos. Probablemente no tenga una base de datos separada y estoy considerando seriamente una solución de base de datos de objetos o documentos como mongo o couch. – smaclell

0

Aquí está mi opinión sobre cómo podría resolver este tipo de problema en la forma en que actualmente estoy practicando DDD.

Si está editando algo que requiere que las etiquetas se agreguen y eliminen como, por ejemplo, una publicación, las etiquetas pueden ser entidades pero quizás podrían ser objetos de valor y se cargan y guardan junto con la publicación de cualquier forma. Yo personalmente prefiero favorecer los objetos de valor a menos que el objeto necesite ser modificado, pero me doy cuenta de que existe una diferencia entre los objetos de la entidad modelados como "instantáneas" de solo lectura y los objetos de valor real que carecen de identidad. La parte difícil es que, a veces, lo que normalmente considerarías como una clave podría ser parte de un objeto de valor siempre que no se use como identidad en ese contexto y creo que las etiquetas entran en esta categoría.

Si está editando las etiquetas por sí mismo, probablemente sea un contexto delimitado por separado o, al menos, un agregado separado en el que las etiquetas son en sí mismas la raíz agregada y persisten a través de un repositorio. Tenga en cuenta que la clase de entidad que representa las etiquetas en este contexto no tiene que ser la misma clase de entidad para las etiquetas utilizadas en el agregado de publicaciones.

Si su lista de etiquetas disponibles en la pantalla tiene fines de solo lectura, como para proporcionar una lista de selección, entonces esa es probablemente una lista de objetos de valor. Estos objetos de valor pueden pero no tienen que estar en el Modelo de dominio, ya que se trata principalmente de soportar la IU y no del dominio real.

Responda si alguien tiene alguna idea sobre por qué mi opinión sobre esto podría ser incorrecta, pero esta es la forma en que lo he estado haciendo.

Cuestiones relacionadas