2009-08-11 7 views
1

Die Anwendung, an der ich gerade arbeite, verwendet das Repository-Muster mit NHibernate. Wir haben eine generische Basis-Repository-Klasse, die Standard-Gets und -Speicher implementiert. Diese Klasse wird dann von Repositorys für jeden Typ vererbt. Diese Repositories können dann ihre eigenen typspezifischen Methoden hinzufügen (und gegebenenfalls überschreiben und abrufen).Das Repository-Muster - Nachschlagen eines Repositorys basierend auf einem Typ

Dies funktioniert gut und aus einer Trennung von Bedenken Sicht bedeutet, dass unsere Geschäftsobjekte POCO sind und unsere Repository-Klassen die Besonderheiten des Sparen behandeln. Praktisch wäre es aber sehr nützlich, wenn wir einen Typ hätten, der sagen könnte: "Hol mir das Repository, das diesen Typ speichern kann". Welche Muster gibt es, die dazu verwendet werden können? Muss ich meine eigene Lookup-Tabelle pflegen? Kann eine Nachschlagetabelle irgendwie automatisch gepflegt werden?

Antwort

6

Sieht aus wie Ihr bereit für ein Dependency Injection-Framework

0

Mit Reflexion und eine Namenskonvention zum Beispiel:

DomainObjectNameRepository

Sie dynamisch das Repository instanziiert könnten Sie für die Verwendung von Activator.CreateInstance suchen. So lange Sie wissen, wie sie am Beispiel oben genannt werden. Ansonsten haben Sie auch das Registrierungsmuster. Erstellen Sie beispielsweise in der Datei web.config ein Mapping-Element, und Sie könnten dann in der Registrierung eine Methode namens ResolveRepository verwenden.

Ein weiterer Vorteil ist, dass Sie IOC damit verwenden können, Umkehrung der Kontrolle mit Unity Beispiel.

Die Zuordnungsdatei würde DOmainObject dem Repository zuordnen und dann innerhalb der Registrierungsmethode Unity verwenden, um beispielsweise die Instanz dieses spezifischen Repositorys aufzulösen und sie als Singleton-Instanzen zu verwenden.

Andrew

Verwandte Themen