Über die Identität von Entitäten

Ich habe hier schon mehrere Artikel von Vladimir Khorikov empfohlen, da er immer sehr interessante und vor allem allgemeingültige Themen diskutiert. Diese Woche kann ich seinen aktuellen Artikel Entity Identity vs Database Primary Key dieser Liste hinzufügen.

Wenn du auch schon einmal die Anforderung hattest, Daten für deine Anwendung in einer Datenbank zu persistieren, wirst du dir vielleicht auch die Frage nach den zu verwendenden Schlüsseln gestellt haben. Objekte in deiner Programmiersprache brauchen eigentlich keine Schlüssel, da Beziehungen zu anderen Objekte über Objektreferenzen gelöst werden (z.B. hat ein Hund einfach ein Attribut herrchen vom Typ Mensch und nicht eine herrchenId vom Typ int). In der (relationalen) Datenbank werden dann aber Fremdschlüssel benötigt, um Datensätze, die diese Objekte repräsentieren, miteinander zu verknüpfen (in der Tabelle Hund gibt es eine Spalte herrchenId, die auf die Spalte id in der Tabelle Mensch zeigt). Dabei stellt sich nun die Frage, wie dies zu lösen ist.

Darüber hinaus gibt es im (aktuell sehr modernen) Ansatz des Domain-Driven Design* die Unterscheidung zwischen Value Objects und Entities, wobei letztere eine „Identität“ haben (z.B. der Mensch Stefan oder der Hund Wauzi) und erstere nicht (z.B. eine Portion Hundefutter, die durch jede beliebige andere Portion der gleichen Menge ausgetauscht werden könnte). Diese Konzepte gilt es ebenfalls mit der Persistenz in Einklang zu bringen.

Im genannten Artikel erklärt Vladimir noch einmal die obigen Fachbegriffe und gibt Hinweise, wie das Persistenzmodell gemeinsam mit Objektorientierung und Domain Driven Design funktionieren kann.

Falls du mit dem Domain Driven Design bisher noch nicht viel anfangen kannst, empfehle ich das Standardwerk von Eric Evans zum Einstieg: Domain-Driven Design: Tackling Complexity in the Heart of Software*.

Domain-Driven Design: Tackling Complexity in the Heart of Software (Affiliate)*


Verwendest du in deinen Projekten DDD? Wie persistierst du deine Daten?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax