2010-07-07 10 views
7

Sagen wir, wir haben "Benutzer" und ein "Hotel" Modell Klassen. Ich würde einen User_Mapper und einen Hotel_Mapper zum Laden/Speichern/Löschen usw. verwenden. Ich möchte dann, dass der Benutzer seine "Lieblings" Hotels markieren kann. In der Datenbank habe ich meine user_favourite_hotels Tabelle, die eine einfache Linktabelle zusammen mit einem Feld zum Abonnieren von Hotelupdates ist.Data Mapper API - unsicher über Organisation

Wenn Sie die Lieblingshotels des Benutzers auflisten, wie würde Sie erwarten, dass dies aus Sicht der API funktioniert? Ein Teil von mir denkt, dass dies eine "findFavouritesByUserId" -Methode auf dem Hotel_Mapper sein sollte, aber abgesehen davon, dass es "richtig" fühlt - jedoch schlägt ein Kollege vor, dass die "Favoriten" dem Benutzer gehören und daher auf dem User_Mapper sein sollten.

Vielleicht sollte ich einen User_Hotel_Favourites_Mapper haben? Ich dachte daran, die "Favoriten" -Daten in das User-Objekt einzufügen, damit es gespeichert und geladen wird, wenn das User-Objekt ist. Ich bin mir nicht sicher, ob es besser wäre, es in sein eigenes Objekt und Mapper zu zerlegen.

Ich würde mich über jeden Hinweis freuen, wie die API für die oben genannten und alle Vorteile/Nachteile/Erfahrungen am besten einzurichten.

Vielen Dank,

James.

Antwort

2

Diese (zugegebenermaßen zurückgezogene) patterns&practices guide to designing data tier components schlägt vor, dass Sie die Methode in den Mapper des Objekttyps einfügen, den Sie von dem Aufruf zurück erhalten.

Wenn Sie über Methoden verfügen, die einen bestimmten Typ von Geschäftsentität zurückgeben, platzieren Sie diese Methoden in der Datenzugriffslogikkomponente für diesen Typ. Wenn Sie beispielsweise alle Bestellungen für einen Kunden abrufen, implementieren Sie diese Funktion in der Bestelldatenzugriffslogikkomponente, da Ihr Rückgabewert vom Typ Bestellung ist. Wenn Sie hingegen alle Kunden abrufen, die ein bestimmtes Produkt bestellt haben, implementieren Sie diese Funktion in der Kundendatenzugriffslogikkomponente.

Also, in Ihrem Beispiel würde es im Hotel Mapper gehen, da es Hotels zurückgibt.

1

Wenn Sie die beliebtesten Hotels für den Benutzer speichern möchten, können Sie die UserMapper verwenden, die für User, dass Domain-Objekt bemerkt hat Änderungen Favoriten und aktualisiert beide Tabellen für Benutzer und für user_favorite_hotels (Sie müssen nur die Hotel-IDs).

Wenn Sie die beliebtesten Hotels einiger Benutzer abrufen, verwenden Sie HotelMapper und Filter setzen auf User zu beruhen, da Sie mit Instanzen der Hotel arbeiten werden.

0

In Anbetracht der Tatsache, dass dies vor mehr als 2 Jahren gefragt wurde, bin ich mir nicht sicher, ob eine Antwort für Sie jetzt wichtig ist. Aber hier ist was ich denke sowieso.

Wenn User mehrere Arten von Favoriten haben könnte (einschließlich Hotel s), kann es sinnvoll sein, eine Abstraktion zu haben, um alle möglichen Arten von Favoriten abzudecken. UserFavourites könnte eine getItems()-Methode verfügbar machen, um die zugrunde liegenden Favoriten zu erhalten.

Dies könnte mit Hilfe einer Manager-Klasse verwaltet werden, um das entsprechende Favoriten-Objekt (FavouriteHotels zum Beispiel) zurückzugeben, auf dem die getItems()-Methode aufgerufen werden kann.