06-09-2015, 01:27 PM
Citation :je sais également qu'à force de vouloir me faire implémenter des méthodes ou des comportements dans mes VO, ça n'en sera plus, ça sera des objets tout court. Est-ce cela que tu voulais entendre ?
Citation : ou me faire dire une grosse contradiction. C'est voulu ?
Oui, parce que ta définition "Immutable + Egalité sur tout ou une partie des attributs" n'est pas cohérente, puisque de ce que tu dis, en ajoutant "trop" de comportements, ce n'est plus un VO. Mais s'il y a des comportements, ça peut quand même être un VO.
La définition n'est donc pas exacte. Si un objet qui a "trop" de comportements n'est plus un VO, mais qu'un VO peut avoir "quelques" comportements, alors ta définition doit être précisée (et je pense qu'elle sera alors très subjective, à cause du "trop").
De plus, si un VO = {Immutable + Egalité sur des attributs}, alors un DTO immutable={Immutable + Egalité sur les attributs + No Behavior} EST un VO particulier (mais tout VO n'est pas un DTO immutable, puisque le VO peut avoir des comportements, aka BIE est inclus dans IE).
Enfin, pour le cas de l'adresse, comment stockes-tu ça en BDD? Pour ma part, j'aurai une table de Personnes, où chacune est liée à une Adresse (table séparée), avec un lien N..1: N personnes peuvent avoir 1 même adresse. Si la BDD a la même structure que ton VO, chaque adresse de chaque personne devrait être répétée (lien 1..1) puisqu'il faut faire un "lookup" quand on veut déménager une adresse (pas une personne, une adresse).
Tiens, autre façon de présenter les choses: si Adresse={int numéro, Rue rue} et Rue={string Nom, Ville ville} et Ville={string ville, Pays pays} et Pays={string nom} (je pousse loin volontairement). Si un Pays change de nom, alors par immutabilité, il va falloir en créer un nouveau, puis chercher toutes les occurrences du vieux pays pour les remplacer par le nouveau. Mais comme ce vieux Pays apparait dans un "Ville" qui est un VO immutable, il va falloir créer de nouvelles Ville qui remplaceront les anciennes occurrences dans Rue... Mais Rue est un VO, il faut donc créer de nouvelles Rue... Et il faut créer de nouvelles Adresse... On recalcule la Terre entière alors qu'on a juste changé le nom d'un Pays !