在"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”系列包括: