2009-11-23 13 views

Répondre

9

Oui, il est très utile de pouvoir faire la différence, en particulier lorsque vous concevez et implémentez vos types. L'une des principales différences est quand il s'agit de traiter l'égalité, puisque les entités doivent avoir un comportement assez différent de celui des objets de valeur. Savoir si votre objet est une entité ou un objet de valeur vous indique comment implémenter l'égalité pour le type. C'est utile en soi, mais cela ne s'arrête pas là.

Les entités sont des types mutables (au moins par concept). L'idée derrière une entité est qu'elle représente un concept de domaine avec une progression de durée de vie connue (c'est-à-dire qu'elle est créée, elle subit plusieurs transformations, elle est archivée et peut-être éventuellement supprimée). Il représente la même chose particulière même si des mois ou des années passent, et il change d'état en cours de route.

Valeur Les objets, d'autre part, représentent simplement des valeurs sans aucune identité inhérente. Bien que vous n'ayez pas à le faire, ils se prêtent énormément à être implémentés comme des types immuables. C'est très intéressant car tout type immuable est par définition thread-safe. Alors que nous entrons dans l'ère du multi-noyau, savoir quand implémenter un objet comme un type immuable est très précieux.

Cela aide également beaucoup dans le test unitaire lorsque la sémantique d'égalité est bien connue. Dans les deux cas, l'égalité est bien définie. Je ne sais pas quelle langue vous utilisez, mais dans beaucoup de langages (C#, Java, VB.NET) l'égalité est déterminée par référence par défaut, ce qui dans beaucoup de cas n'est pas particulièrement utile.