2009-07-22 3 views
1

Ich erstelle RESTful-Dienste für mehrere Datenbankelemente basierend auf einer modifizierten Version der BISDM. Einige dieser Einheiten Lookup-Tabellen verknüpft haben, wie unten dargestellt:Bei der Implementierung des Repository-Muster sollte Lookup-Wert/Tabellen ihr eigenes Repository bekommen?

Snippet of modified BISDM schema

Ich habe beschlossen, die Repository-Muster zu verwenden, um eine saubere Trennung zwischen Daten persistance/Abruf zur Verfügung zu stellen; Ich bin mir jedoch nicht sicher, wie Lookups (im Gegensatz zu Entitäten) im Repository dargestellt werden sollten.

Sollten Lookups ihre eigene Repository-Schnittstelle erhalten, "eins" mit der zugehörigen Entität teilen oder sollte es eine generische ILookupRepository-Schnittstelle geben?

Momentan sind diese Suchvorgänge schreibgeschützt. Es wird jedoch eine Zeit geben, in der wir die Suchvorgänge möglicherweise über Dienste bearbeiten möchten.

Option 1: 
    ISpaceRepository.GetSpaceCategoryById(string id); 
Option 2: 
    ISpaceCategoryRepository.GetById(string id); 
Option 3: 
    ILookupRepository.GetSpaceCategoryById(string id); 

Im übrigen ist diese Frage zu einem anderen Zusammenhang look-up tables & RESTful web services in Bezug auf.

Antwort

3

Nein. Repositories sollten Domänenmodellkonzepte, nicht auf Entitätsebene Konzepte und sicherlich nicht Datenbankebene darstellen. Denken Sie über all die Dinge nach, die Sie mit einer bestimmten Komponente Ihrer Domain machen möchten, zum Beispiel Spaces.

Eines der Dinge, die Sie tun möchten, ist GetSpaceCategories(). Dies sollte unbedingt in das Spaces-Repository aufgenommen werden, da jeder, der mit Spaces arbeitet, Zugriff auf die Space-Kategorien haben möchte, ohne ein anderes Repository instanziieren zu müssen.

Ein generisches Repository wäre ziemlich kontraproduktiv, denke ich. Das Behandeln eines Repositorys wie einer Dienstprogrammklasse würde praktisch garantieren, dass jeder moderat komplexe Vorgang beide Repositories instanziieren müsste.

+0

Mit diesem Ansatz, UpdateSpaceCategory (SpaceCategory spaceCategory) und DeleteSpaceCategory (String-ID) wäre auch in der ISpaceRepository auch, richtig? –

+0

Sicher. Der Zweck des Repository besteht darin, den zugrunde liegenden Datenzugriff zu verbergen. Wenn Sie Ihre Datenbankebene wechseln würden, würde der Rest Ihres Programms immer noch GetCategories() oder UpdateCategory() für das Repository aufrufen - die Änderung wäre für den Repository-Consumer transparent. – womp

Verwandte Themen