domain driven design - que - ¿Cómo se almacenan los objetos de valor en la base de datos?
funciones de un controlador de dominio (3)
Realmente no he visto ningún ejemplo, pero asumo que están guardados dentro de la tabla de entidades contenidas dentro de la base de datos.
Es decir. Si tengo una entidad de persona / raíz agregada y una tabla de persona correspondiente, si tuviera un objeto de valor llamado Dirección, los valores de Dirección se guardarán dentro de esta tabla de Persona.
¿Tiene sentido para un dominio donde tengo otras entidades, como empresas, etc., que tienen una dirección?
(Actualmente estoy escribiendo una aplicación de gestión de proyectos y tratando de entrar en DDD)
Empecé a aprender DDD con el libro de Eric Evans y el excelente proyecto dddsample Cargo como ejemplo. http://dddsample.sourceforge.net/
Entonces, para aquellos (como yo) que quieren materializar la diferencia en la implementación del código de este matiz en la capa del Modelo de Dominio, diría:
El método overidded Equals y / y sameIdentityAs / SameValueAs (desde la interfaz Entity y ValueObject) son, creo, el lugar de su expresión.
Es solo mi sentimiento :)
Creo que es interesante leer esto también:
Está bien almacenar los objetos de valor en una tabla separada, por las razones que ha descrito. Sin embargo, creo que no está entendiendo bien las Entidades contra las VO, no es una preocupación relacionada con la persistencia.
Aquí hay un ejemplo:
Supongamos que una Compañía y una Persona tienen la misma Dirección de correo. ¿Cuál de estas afirmaciones considera válida?
- "Si modifico Company.Address, quiero que Person.Address obtenga esos cambios automáticamente"
- "Si modifico Company.Address, no debe afectar a Person.Address"
Si 1 es verdadero, la dirección debe ser una entidad y, por lo tanto, tiene su propia tabla
Si 2 es verdadero, la dirección debe ser un objeto de valor . Podría almacenarse como un componente dentro de la tabla de la Entidad principal, o podría tener su propia tabla (mejor normalización de la base de datos).
Como puede ver, la forma en que se mantiene la dirección no tiene nada que ver con la semántica Entidad / VO.
La mayoría de los desarrolladores tienden a pensar en la base de datos antes que nada. DDD no sabe cómo se maneja la persistencia. Eso depende del repositorio para lidiar con eso. Puede conservarlo como un xml, sql, archivo de texto, etc. Las entidades / agregados / objetos de valor son conceptos relacionados con el dominio.
La explicación de Vijay Patel es perfecta.