114 votes

Objets de valeur et objets d'entité (Domain Driven Design)

Je viens de commencer à lire DDD. Je ne parviens pas à saisir complètement le concept d'entité par rapport aux objets de valeur. Quelqu'un peut-il m'expliquer les problèmes (maintenabilité, performance, etc.) auxquels un système peut être confronté lorsqu'un objet de valeur est conçu comme un objet d'entité ? Un exemple serait bien...

3voto

Ramin Farajpour Points 217

3 distinction entre Entities y Value Objects

  • L'identifiant et l'égalité structurelle : Les entités ont un identifiant, les entités sont identiques si elles ont le même identifiant. Les objets de valeur, quant à eux, ont une égalité structurelle. objets de valeur sont égaux lorsque tous les champs sont les mêmes. Les objets de valeur ne peuvent pas avoir d'identifiant.

  • Mutabilité contre immuabilité : Les Value Objects sont des structures de données immuables alors que les entités changent pendant leur durée de vie.

  • Durée de vie : Les objets de valeur devraient appartenir à des entités

2voto

n8wrl Points 12485

J'ai posé une question à ce sujet dans un autre fil et je pense que je suis toujours confus. Je confonds peut-être les considérations de performance avec la modélisation des données. Dans notre application de catalogage, un client ne change pas tant qu'il n'en a pas besoin. Cela peut paraître stupide, mais les "lectures" de données clients sont bien plus nombreuses que les "écritures" et, étant donné que de nombreuses requêtes web portent toutes sur l'"ensemble actif" d'objets, je ne veux pas continuer à charger les clients encore et encore. Je me suis donc dirigé vers une voie immuable pour l'objet Client - le charger, le mettre en cache, et servir le même objet aux 99% de requêtes (multi-threads) qui veulent voir le Client. Ensuite, lorsqu'un client modifie quelque chose, un "éditeur" crée un nouveau client et invalide l'ancien.

Ce qui me préoccupe, c'est que si plusieurs threads voient le même objet client et qu'il est mutable, lorsqu'un thread commence à le modifier, les autres peuvent se retrouver dans la même situation.

Mes problèmes maintenant sont, 1) est-ce raisonnable, et 2) comment faire au mieux sans dupliquer beaucoup de code sur les propriétés.

2voto

Alireza Rahmani Points 74

En une phrase très simple, je peux dire que nous avons trois types d'égalité :

  • Égalité des identifiants : une classe a un champ id et deux objets sont comparés avec la valeur de leur champ id.
  • Égalité de référence : si une référence à deux objets a la même adresse en mémoire.
  • L'égalité structurelle : deux objets sont égaux si tous leurs membres sont appariés.

Égalité des identifiants renvoie à uniquement à l'Entité et l'égalité structurelle se réfère uniquement à l'Objet de valeur. En fait, les Value Objects n'ont pas d'id et nous pouvons les utiliser de manière interchangeable. De plus, les Value Objects doivent être immuables alors que les entités peuvent être mutables et les Value Objects n'auront aucune table dans la base de données.

1voto

Mohamed Emad Points 329

Considérez les exemples suivants tirés de Wikipedia afin de mieux comprendre la différence entre les objets de valeur et les entités :

Objet de valeur : Quand les gens échangent des billets de banque, ils ne font généralement pas généralement pas de distinction entre chaque billet unique ; ils ne se préoccupent que de la valeur faciale valeur faciale du billet d'un dollar. Dans ce contexte, les billets de banque sont des objets de valeur. Cependant, la Réserve fédérale peut se préoccuper de chaque billet unique ; dans ce contexte, chaque billet serait une entité. dans ce contexte, chaque billet serait une entité.

Entité : La plupart des compagnies aériennes distinguent chaque siège de manière unique sur chaque vol. Chaque siège est une entité dans ce contexte. Cependant, Southwest Airlines, EasyJet et Ryanair ne font pas de distinction entre les sièges. Ryanair ne font pas de distinction entre les sièges ; tous les sièges sont les mêmes. Dans ce contexte, un siège est est en fait un objet de valeur.

0voto

Omar AMEZOUG Points 404

Une entité :

  • a une identité

  • contient des objets de valeur

  • peut contenir d'autres entités

  • peut être mutable

Un objet de valeur :

  • n'a pas d'identité

  • doit être immuable

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