2016-11-11 3 views
3

Canonical implementation of Repository mit EF wie folgt aussieht:Entity-Framework, IRepository und UnitOfWork. Wie implementieren Sie DAL?

public interface IStudentRepository : IDisposable 
{ 
    IEnumerable<Student> GetStudents(); 
    Student GetStudentByID(int studentId); 
    void InsertStudent(Student student); 
    void DeleteStudent(int studentID); 
    void UpdateStudent(Student student); 
    void Save(); 
} 

Hier sehe ich Mischung aus IRepository, UnitOWork.

Aber Fowler sagt, dass Repository ist collection-like interface for accessing domain objects. Demnach sollten Update-, Delete- und Insert-Methoden in eine andere Klasse verschoben werden. Sowie Save sollte in die Klasse implementiert werden, die IUnitOfWork implementiert.

In meinem aktuellen Projekt implementieren wir IRepository als offizielle Dokumentation sagt. Kann es in Zukunft Probleme geben? Eine Lösung wäre die Implementierung von CQRS, vielleicht mit Event-Sourcing, aber es wird Zeit und Ressourcen kosten. Wie implementieren Sie DAL in Ihren Projekten?

+0

Entity Framework implementiert bereits Arbeitseinheit (DbContext) und Repositorys (DbSet). Warum fügst du mehr Abstraktion hinzu? –

+1

Da im Allgemeinen Geschäftslogik nicht von Implementierungsdetails von DAL abhängen sollte. Wenn wir DbContext und DbSets direkt verwenden, verursachen sie eine enge Kopplung. Und es kann Probleme beim Testen und Ändern von EF zu NHibernate oder Dapper verursachen. – NikitaKo

Antwort

3

Nichts ist falsch mit dem, was Sie dort haben.

Die einzige Sache, die ich mache, ist ich eine Singleton Factory für mein Repository erstellen, die Teil einer DataService-Klasse ist. Die DataService-Klasse würde Bereitstellungsrepository-Instanzen bereitstellen

Verwandte Themen