2012-04-26 16 views
5

Ich arbeite an einer Anwendung, wo Benutzer einander folgen können, ähnlich wie Twitter.DDD: Verbindungsobjekte sind Entity Object oder Value Object?

Nach dem Lesen von DDD, verstehe ich, dass meine Benutzer Entity Objects sind - ich beziehe mich auf sie mit ihrer eindeutigen ID.

Wenn ein Benutzer einem anderen folgt (d. H. Eine Verbindung herstellt), wird die Beziehung in einer Viele-zu-Viele-Tabelle gespeichert. Seine Felder umfassen FollowerID, TargetID und Status. Es kann nur zwei Datensätze für jede Follower/Target-Kombination geben (eine aktive, die andere inaktiv), so dass ich Objekte basierend auf ihren Attributen sicher identifizieren kann.

Also, ich denke, meine Connection-Objekte sind Value-Objekte, keine Entity-Objekte, aber ich bin mir nicht sicher. Kannst du mir bei dieser Entscheidung helfen?

Antwort

4

Sie haben Recht, dass Entitäten eindeutig sind und den Begriff der Identität tragen (d. H. Es kann nur ein einziger Benutzer existieren). A Connection ist abhängig von anderen User Einheiten. Es repräsentiert einen Aspekt zwischen zwei Benutzern. Dieser Aspekt ist, ob es eine aktive oder inaktive Verbindung gibt. Ohne die Daten zu enthalten, zu denen sich Benutzer verbinden, hat eine Verbindung keine Identität. Es kann sogar einen eigenen Primärschlüssel in der Datenbank haben, aber aus einer Domänenperspektive hat es keine eigene Identität.

Daher würde ich sagen, dass Connection ein Wert Objekt ist.


meine Schlussfolgerung zu unterstützen, Microsoft.Net Architecting Applications for the Enterprise, Seite 187, sagt:

Ein Wert Objektklasse repräsentiert eine Einheit in der Domäne, die meist Daten enthält und lebt für die Daten, die er enthält. Ein Wertobjekt ist vollständig durch eine Kombination von Werten identifiziert, die es enthält. Ein Objekt hat dagegen sein eigenes Leben und reiches Verhalten unabhängig von den Daten, die es enthält. Entitätsobjekte sind normalerweise Objekte mit einer längeren Lebensdauer. Ein Wertobjekt repräsentiert einen Aspekt einer Entität und kann nur in Bezug auf eine Entität leben.

Und auch auf Seite 189:

Ein weiterer Kommentar ist erforderlich, um die Differenz zwischen Entitäten und Wertobjekten zu erklären. Sie benötigen kein Repository oder einen Daten- -Mapper für ein Wertobjekt. Sie benötigen ein Repository nur für eine Entität. Das Repository (oder der Mapper) für eine gegebene Entität wird Pflege aller Wertobjekte, die von einer bestimmten Entität abhängen.

+0

„Ohne die Daten zu enthalten, von denen Benutzer eine Verbindung herstellen, hat eine Verbindung keine Identität“ - Die Verbindung ist für eine Kombination von FollowerID und TargetID einzigartig. Wenn wir also einen TaregtID und FollowerID haben, die ich glaube userids sind, können wir eine Verbindung identifizieren. Also, wie ist es kein Entitätsobjekt? –

+0

@HariSubramaniam, eine andere Weise zu setzen ist als [diese Seite] (http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/) sagt "Ein Wertobjekt kann ohne eine Entität nicht alleine leben." Es ist sicherlich nicht immer leicht zu bestimmen, was was ist, aber nach über das Denken und Forschen es, ich stützte sich schwer auf sie ein Wertobjekt zu sein. – Matt

2

Vor einiger Zeit sah ich einen Cartoon über Wissenschaftler, der das Klonen erfunden hatte. Jedes Mal, wenn er sich selbst klonierte, zerstörte er die vorherige Version. Dann hat sich Person, die Demonstration beobachtet hat, dafür entschieden, Zerstörungsteil zu unterbrechen und zu sabotieren, so gab es zwei Wissenschaftler. Cartoon endete mit interessanten existenziellen Fragen.

Bei Werten gegen Entitäten geht es nicht darum, ID-Felder in der einen oder anderen Form zu haben oder nicht. Punkt ist - wie wir diese Objekte durch unsere Domänenperspektive betrachten.Wenn sie Wertobjekte sind, dann nur ihren Wert Sachen - 1., 3. und 53. Wissenschaftler sind die gleichen. Wenn wir über Identität kümmern, wenn wir denken, dass der 3. Wissenschaftler klonen wird nie wie erste sein, dann ist unser Ziel ist eine Einheit.