2012-03-26 10 views
0

Ich habe eine Entität namens Person. Es stellt eine Person dar, die Informationen mit anderen Personen teilen kann. Ich definiere auch zwei Entitäten TelephoneNumber und Address, die einige Informationen darstellt. Jede Person kann die Datenbank mit ihrer Telefonnummer und Adresse als Instanzen von TelephoneNumber und Address bereitstellen und die bereitgestellten Informationen gehören nur dieser Person. Dann kann eine Person, die eine bestimmte Informationstelefonnummer und -adresse besitzt, diese über die Einheit Association miteinander verknüpfen und kann diese Zuordnung anderen Personen mitteilen.Repository-Methoden oder aggregierte Root-Methoden?

Ich versuche Domain-basierte Design-Methodik zu folgen. Da eine Telefonnummer oder Adresse nur einer Person gehört, sind die Identitäten TelephoneNumber und Address lokal zu dieser Person Identität. Also, ich denke, es gibt ein Aggregat, das die Entitäten Person, TelephoneNumber, Address und Association enthält. Die Wurzel des Aggregats wäre die Entität Person. Also, natürlich brauche ich ein Repository für die Entität Person, da es das aggregierte Root ist, und ich kann ein Personenelement aus einem Datenspeicher mit diesem Repository "rekonstituieren".

Jetzt möchte eine bestimmte Person eine Telefonnummer und eine Adresse hinzufügen und möchte sie zuordnen. Unter der Annahme, dass die Person bereits im Datenspeicher vorhanden ist, erhalte ich die Person in Frage mit dem Repository. Wie füge ich dann die Informationen hinzu?

Ich sehe zwei Ansätze. Verwenden Sie addTelephoneNumber und addAddress Methoden in der Person Einheit oder mit Repositorys für TelephoneNumber, Address und Association.

Angenommen, der erste Ansatz ist der richtige, was müssen diese Methoden tun? Wie können diese Methoden Informationen zum Datenspeicher hinzufügen? Ich präzisiere, dass ich eine Traversierungsrichtung für die Assoziationen zwischen Person und Telefonnummer/Adresse ausgewählt habe, von Telefonnummer/Adresse zu Person. Jedes Mal, wenn ich eine Person abrufe, erhalte ich nicht alle ihre Telefone und Adressen. In diesem Fall, wenn eine Person ein Telefon mit der addTelephoneNumber-Methode hinzufügen möchte, was macht die Methode? Wo wird das neue Telefon hingestellt?

PS: Die Telefonnummern und die Adressen einer Person gehören nicht unbedingt zu denen dieser Person, sie sind nur Informationen, die diese Person kennt und mit anderen Personen teilen möchte.

+0

Dies wäre viel einfacher zu verstehen, wenn Sie ein genaueres Beispiel machen. Ich bin sicher, dass Ihre Entitäten in Ihrem realen System nicht "X" und "Y" genannt werden. – Marius

+0

@Marius Es ist fertig. Ich dachte, es wäre besser, generisch zu bleiben, aber ich denke, du hast Recht, da die Lösungen im Allgemeinen von der Domäne abhängen. –

+0

Müssen das Telefon und die Adresse, die Sie hinzufügen möchten, bereits im Datenspeicher vorhanden sein oder möchten Sie sie erstellen? – guillaume31

Antwort

2

Die Idee eines Objekts, das eine Telefonnummer und eine Adresse einkapselt, scheint in Ihrer Domäne wichtig zu sein. Sie könnten so etwas wie eine ContactInfo-Entität ("Assoziation" erscheint etwas zu vage) mit einer Telefonnummer und einer Adresse haben. Telefon und Adresse ändern sich per se nicht wirklich - es ist vielmehr die ContactInfo, die sich ändert, so dass Sie Objekte wertschätzen können.

Person würde das aggregierte Stammverzeichnis und die einzige Entität mit einem Repository bleiben. Sie würden einfach person.AddContactInfo() aufrufen, um eine neue Kontaktinfo hinzuzufügen. Kontaktinformationen werden später zusammen mit der Person gespeichert.

Verwandte Themen