2016-11-11 41 views
3

Canonical implementation of Repository與EF的樣子:實體框架,IRepository和UnitOfWork。你如何實現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(); 
} 

在這裏,我看到IRepository,UnitOWork的組合。

但是Fowler說庫是collection-like interface for accessing domain objects。據此,Update,Delete和Insert方法應該移到另一個類中。以及Save應該移到實現IUnitOfWork的類中。

在我目前的項目中,我們實現了IRepository,正如官方文檔所述。它會在未來造成問題嗎?一種解決方案是實施CQRS,可能採用事件採購,但需要時間和資源。那麼,你如何在你的項目中實現DAL?

+0

實體框架已經實現工作單元(DbContext)和存儲庫(DbSet)。爲什麼要添加更多的抽象? –

+1

因爲一般來說業務邏輯不應該依賴於DAL的實現細節。如果我們直接使用DbContext和DbSets,會導致緊耦合。它可能會導致問題,例如測試並將EF更改爲NHibernate或Dapper。 – NikitaKo

回答

3

你在那裏沒有錯。

我另外做的唯一事情是爲我的存儲庫創建一個單例工廠,它是DataService類的一部分。 DataService類將傳遞存儲庫實例