Dans le domaine de l'architecture logicielle et des systèmes distribués, la question « qu'est-ce qu'une entité ? » est bien plus qu'une interrogation sémantique. Elle constitue le fondement de la modélisation de domaine et de la conception d'agrégats, en particulier dans les systèmes s'appuyant sur la source d'événements (event sourcing). Un document technique récent publié par EventSourcingDB se penche sur cette problématique, en la replaçant dans le cadre plus large de la conception de systèmes pilotés par les événements.
L'entité comme identité persistante
Selon ce guide, une entité ne se définit pas par ses attributs, mais par sa continuité d'existence dans le temps. Contrairement à un objet valeur (value object) qui est interchangeable si ses propriétés sont identiques, une entité possède une identité unique qui lui est propre et qui persiste même si l'ensemble de ses caractéristiques change. Cette distinction est cruciale dans les architectures événementielles, où chaque modification de l'état d'une entité est enregistrée sous la forme d'un événement.
Source d'événements et sujets
Le document explique que, dans une base de données orientée événements comme EventSourcingDB, les événements sont organisés autour de « sujets » (subjects). Ces sujets représentent des entités ou des agrégats d'entités. Chaque événement est associé à un sujet, ce qui permet de reconstituer l'historique complet et l'état actuel de l'entité en rejouant la séquence d'événements qui lui est rattachée. Cette approche s'oppose au stockage traditionnel en tables, où seule la dernière valeur est conservée.
Modélisation et conception d'agrégats
La notion d'entité est centrale dans la pratique de l'event storming et la conception d'agrégats. Un agrégat est un groupe d'entités et d'objets valeur qui doivent être traités comme une unité cohérente pour les modifications transactionnelles. L'identification correcte des entités et la définition de leurs limites de cohérence (consistency boundaries) sont présentées comme des étapes clés pour éviter les incohérences de données dans les systèmes distribués.
Implications pour le développement
Pour les développeurs, comprendre ce qu'est une entité permet de mieux structurer les événements, de versionner les schémas et de concevoir des modèles de lecture (read models) efficaces. Le document aborde également les patrons pour les requêtes temporelles (temporal queries) et la gestion des instantanés (snapshots), qui permettent de reconstruire l'état d'une entité à un moment donné sans avoir à rejouer la totalité de son historique.
Cette clarification conceptuelle s'inscrit dans un effort plus large de documentation visant à outiller les équipes de développement pour construire des applications événementielles robustes, évolutives et auditables.