在"MVC項目實踐,在三層架構下實現SportsStore-02,DbSession層、BLL層"一文的評論中,博友浪花一朵朵建議用類圖來理解本項目的三層架構。於是就有了本篇:
IDAL層
→IBaseRepository接口,基接口,提供泛型實現
所有的數據接口層的方法基本上是一樣的,包括查詢、分頁查詢、添加、批量添加、更新、批量更新、刪除、批量刪除等。所以,有必要針對所有的數據接口提煉出基接口,提供泛型實現。
→IProductRepository接口
實現IBaseRepository接口。
→IDbContextFactory接口,當前EF上下文的抽象工廠
在DAL的BaeRepository中一定會用到EF上下文,我們借助IDbContextFactory這個"抽象工廠"生產DbContext的實例。
→IDbSession接口,數據庫訪問層的統一入口接口
主要做了3件事:
1、提交所有變化
2、拿到各個IXXXRepository類型
3、執行SQL語句
→IDbSessionFactory接口,IDbSession接口的抽象工廠
在BLL的BaseService中一定會用到IDbSession這個數據層的統一入口,我們借助IDbSessionFactory這個"抽象工廠"生產IDbSession的實例。
DAL層
→BaseRepository,所有XXXRepository的基類,提供泛型實現
BaseRepository沒必要實現IBaseRepository,因為它的存在是為了避免各個XXXRepository代碼重復,它提供了各個XXXRepository的泛型實現。
BaseRepository實現IDisposable接口后,以便實施手動回收。
→ProductRepository
派生於BaseRepository<Product>基類。
實現IProductRepository接口,它的行為受IProductRepository約束。
→DbContextFactory,實現抽象工廠IDbContextFactory接口,用來生產EF上下文實例
它的實現過程保證了在當前線程內獲取唯一EF上下文實例。
→DbSession,對IDbSession接口的實現
主要做了3件事:
1、提交所有變化
2、拿到各個IXXXRepository類型
3、執行SQL語句
→DbSessionFactory,實現IDbSessionFactory接口
它的實現過程保證了在當前線程內獲取唯一數據層訪問入口IDbSession實例。
IBLL層
→IBaseService,是所有IXXXService接口的基接口,提供了泛型實現
它的實現避免了各個IXXXService接口的重復部分。
→IProductService,對基接口IBaseService<Product>的實現
BLL層
→BaseService,是所有XXXService的基類,提供了泛型實現
他的實現避免了各個XXXService的重復部分。
實現IDisposable接口后,以便實施手動回收。
→ProductService,派生於BaseService<Product>基類。
它的行為受實現IProductService接口約束。
源碼在這里。
“MVC項目實踐,在三層架構下實現SportsStore”系列包括:




