Frage

Ich bin in dem Prozess des Fanges für ein Projekt zur technischen Dokumentation bis ich vor einigen Monaten abgeschlossen, und ein ich komme Nähe zur Weiterverarbeitung. Ich benutzen Repositories abstrakt aus der Datenzugriffsschicht in beide und wurde eine kurze Zusammenfassung des Musters auf unserem Wiki bei der Arbeit zu schreiben.

Es war diese Zusammenfassung beim Schreiben, die ich erkannte ich das zweite Mal einen etwas anderen Ansatz haben.

Eine verwendete ein explizites InsertOnSubmit Verfahren in Verbindung mit einer Arbeitseinheit und ein impliziten Update mit den UOW-Tracking-Änderungen. Der andere hatte eine Save Methode, die neuen Einträge eingefügt und bestehende aktualisiert (ohne UOW).

Welche Vorgehensweise würden Sie normalerweise bevorzugen? Betrachten wir die üblichen CRUD Szenarien, wo sollte die die responbility für jeden von ihnen liegen?

War es hilfreich?

Lösung

Ich denke, ob ein Repository Unit of Work, Caching verwendet, oder andere verwandte Konzepte sollten zur Umsetzung überlassen werden. Ich ziehe es für die Schnittstelle einen Datenspeicher zu ähneln, die mit dem Domänen-Modell in der Hand ausgerichtet ist. Damit ein Kunde Repository etwas wie folgt aussehen:

interface ICustomerRepository
{
    Customer Load(int id);
    IEnumerable<Customer> Search(CustomerQuery q);
    void Save(Customer c);
    void Delete(Customer c);
}

Dies kann leicht durch so etwas wie NHibernate oder NHibernate mit NHibernate.Linq oder einer direkten SQL-Bibliothek oder sogar einem XML oder Flat-File-Speicher implementiert werden. Wenn möglich, möchte ich das das Konzept der Transaktion halten außerhalb des Repository oder auf einem globalen Bereich, so dass Operationen von mehreren Repositories können Teil einer einzigen Transaktion sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top