2012-04-18 8 views
7

Ich erstelle gerade ein Repository und frage mich, was die "beste Vorgehensweise" für den Löschvorgang einer Entität ist. In den folgenden Optionen bilden Marke und Modell den Schlüssel für die Car-Entität.Sollte ein Repository eine Entität löschen oder entfernen, indem ich eine ID oder die Entität selbst übergebe

Option 1:

deleteCar(Car car) 

Option 2:

deleteCar(String make, String model) 

Option 3:

deleteCar(CarKey carKey) 

Zuerst dachte ich, Option 1, aber in der Praxis scheint Option 2 ansprechender zu sein (ich möchte kein Objekt bekommen, wenn ich nur die ID habe, nur damit ich sie in die Löschmethode überführen kann). Ich habe Option 3 gewählt, weil ich solche Sachen gesehen habe, aber das scheint mir nicht richtig zu sein, weil CarKey nicht wirklich ein Domain-Objekt ist.

Gedanken?

+2

Ich wollte nur sagen, dass Option2 verschiedene Autos löschen könnte, weil Entität durch Identität definiert ist, nicht durch ihren Wert. –

+0

Wahr. Ich stellte mir vor, dass es nicht wichtig war, denn so wie ich darüber nachdachte, war es der Primärschlüssel. Aber wenn es nicht war, kann ich das sehen. – testing123

Antwort

4

Option 3.

Es spielt keine Rolle, dass carkey kein Domänenobjekt ist (es allerdings ein Wertobjekt sein kann), ist ein id alles, was Sie für diese Aktion müssen geschehen. Wenn das Car ein AR ist, sollte das Repository wissen, wie GetIt funktioniert und wie mit Löschungen umgegangen wird.

3

Wenn Sie sich strikt an die Definition von repository in DDD halten, dann ist Option 1 der Weg zu gehen, da ein Repository eine In-Memory-Sammlung emuliert. Ich sehe das jedoch nicht als kritische Komponente eines Repositories und kann zu undichten Abstraktionen führen, wenn Sie zu weit gehen. Auf der anderen Seite kann das Erfordernis der Löschung durch das Entitätsobjekt in seiner Gesamtheit ein Hinweis darauf sein, dass der Aufrufer des Repositorys (wie der Anwendungsdienst) die durch die ID zu löschende Entität anfänglich abrufen, alle geschäftlichen Bedenken adressieren und sie entfernen sollte es. ORMs wie Hibernate können durch eine Abfrage löschen, so dass Sie nur die ID benötigen, um ein Löschen aufzurufen, aber es wird trotzdem die Entität aus der Datenbank geladen.

Verwandte Themen