56 votes

Comment les Value Objects sont-ils stockés dans la base de données ?

Je n'ai pas vraiment vu d'exemples, mais je suppose qu'ils sont enregistrés dans la table de l'entité qui les contient dans la base de données.

Ie. Si j'ai une entité/un agrégat racine de personne et une table correspondante de personne, si elle a un objet de valeur appelé adresse, les valeurs d'adresse seront enregistrées dans cette table de personne !

Est-ce que cela a un sens pour un domaine où j'ai d'autres entités comme des sociétés, etc. qui ont une adresse ?

(Je suis actuellement en train d'écrire une application de gestion de projet et j'essaie de me lancer dans le DDD).

112voto

Vijay Patel Points 5696

Il est possible de stocker les objets de valeur dans une table séparée, pour les raisons mêmes que vous avez décrites. Cependant, je pense que vous comprenez mal la différence entre les entités et les objets de valeur - il ne s'agit pas d'un problème lié à la persistance.

Voici un exemple :

Supposons que a Entreprise y Personne les deux ont le même courrier Adresse . Laquelle de ces affirmations est considérée comme valide ?

  1. "Si je modifie Company.Address, je veux que que Person.Address reçoive automatiquement ces changements"
  2. "Si je modifie Company.Address, cela ne doit pas affecter Person.Address"

Si 1 est vrai, Adresse devrait être un Entité et possède donc sa propre table

Si 2 est vrai, Adresse devrait être un Objet de valeur . Il pourrait être stocké comme un composant dans la table de l'entité parente, ou il pourrait avoir sa propre table (meilleure normalisation de la base de données).

Comme vous pouvez le constater, la façon dont l'adresse est persistée n'a rien à voir avec la sémantique des entités/VO.

14voto

Tony Points 436

La plupart des développeurs ont tendance à penser d'abord à la base de données avant toute autre chose. DDD ne sait pas comment la persistance est gérée. C'est au référentiel de s'en occuper. Vous pouvez le persister sous forme de fichier xml, sql, texte, etc etc. Les entités/agrégats/objets de valeur sont des concepts liés au domaine.

L'explication de Vijay Patel est parfaite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X