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?
實體框架已經實現工作單元(DbContext)和存儲庫(DbSet)。爲什麼要添加更多的抽象? –
因爲一般來說業務邏輯不應該依賴於DAL的實現細節。如果我們直接使用DbContext和DbSets,會導致緊耦合。它可能會導致問題,例如測試並將EF更改爲NHibernate或Dapper。 – NikitaKo