Je ne comprends pas pourquoi les objets de valeur dans DDD devraient être immuables, et je ne vois pas non plus comment cela est facilement réalisable. (Je me concentre sur C# et Entity Framework, si cela a de l'importance).
Par exemple, considérons l'objet classique de valeur Adresse. Si vous deviez changer "123 Main St" en "123 Main Rue "Pourquoi devrais-je construire un tout nouvel objet au lieu de dire myCustomer.Address.AddressLine1 = "123 Main Street" ? (Même si Entity Framework supportait les structs, ce serait toujours un problème, n'est-ce pas ?)
Je comprends (je pense) l'idée que les objets de valeur n'ont pas d'identité et font partie d'un objet de domaine, mais quelqu'un peut-il expliquer pourquoi l'immuabilité est une bonne chose ?
EDIT : Ma dernière question ici devrait vraiment être "Quelqu'un peut-il expliquer pourquoi l'immuabilité est une bonne chose" ? appliquée aux objets de valeur ?" Désolé pour la confusion !
EDIT : Pour clarifier, je ne pose pas de question sur les types de valeur CLR (vs les types de référence). Je m'interroge sur le concept DDD de niveau supérieur des Value Objects.
Par exemple, voici un moyen détourné d'implémenter des types de valeurs immuables pour Entity Framework : http://rogeralsing.com/2009/05/21/entity-framework-4-immutable-value-objects . En gros, il rend tous les régleurs privés. Pourquoi se donner la peine de faire ça ?
0 votes
Les types de valeur et de référence sont généralement mélangés, comme le montre votre question initiale en parlant du type de valeur Adresse (struct) et du type de référence Valeur de la propriété String (class). Y a-t-il un avantage à restreindre votre question aux seuls types de valeur ? Pouvez-vous l'ouvrir sans diluer votre intention ?
0 votes
Je ne suis pas sûr de comprendre. Je ne parle pas des types de valeurs CLR (structs, ints, etc.) par rapport aux types de référence (classes, etc.). Je parle du concept DDD de Value Objects (par opposition aux Entity Objects).
0 votes
J'ai parcouru la question, j'ai vu C# et mon esprit a sauté les contextes. Merci pour la clarification.
0 votes
Les objets de valeur ne doivent pas nécessairement être immuables pour éviter les problèmes d'aliasing. Il suffit de leur passer par des valeurs au lieu de par référence et vous serez bien. Voir wiki.c2.com/?ValueObjectsCanBeMutable .