回顾:NLayerAppV3是一个使用.net 2.1实现的经典DDD的分层架构的项目。
NLayerAppV3是在NLayerAppV2的基础上,使用.net core2.1进行重新构建的;它包含了开发人员和架构师都可以重用的DDD层。
Github地址:https://github.com/cesarcastrocuba/nlayerappv3
NLayerAppV3的基础结构层一共分为两个部分。处理数据相关的基础组件和Cross-Cutting的基础组件。
处理数据相关的基础组件主要包含UOW和仓储的实现;
Cross-Cutting的基础组件目前主要包含数据适配器、国际化、验证;
本篇介绍NLayerAppV3的Infrastructure(基础结构层)的Data部分和Application(应用层)
1、Infrastructure(基础结构层)的Data部分
Data部分是处理数据相关的基础组件主要包含UOW和仓储的实现。
UOW的实现:BaseContext继承了DbContext和IQueryableUnitOfWork
DbContext是EF Core数据库上下文,包Microsoft.EntityFrameworkCore
IQueryableUnitOfWork继承IUnitOfWork和ISql,是EF Core方式的契约定义
Isql定义了支持sql语句的方式
Repository仓储的层超类型,通过构造函数注入了IQueryableUnitOfWork和ILogger,定义了EF Core方式的CURD以及查询过滤,包括分页等行为
MainBCUnitOfWork实现了BaseContext。示例使用内存数据库的方式来演示,当然,根据实际需要,可以很容易地扩展使用sqlserver、mysql、sqlite等,这也符合了开闭原则
BankAccountRepository是BankAccount仓储,继承Repository<BankAccount>,IBankAccountRepository,通过构造函数注入了MainBCUnitOfWork和ILogger,提供了一个GetAll方法,用来获取BankAccount的集合。
public class BankAccountRepository :Repository<BankAccount>,IBankAccountRepository { #region Constructor /// <summary> /// Create a new instance /// </summary> /// <param>Associated unit of work</param> /// <param>Logger</param> public BankAccountRepository(MainBCUnitOfWork unitOfWork, ILogger<Repository<BankAccount>> logger) : base(unitOfWork, logger) { } #endregion #region Overrides /// <summary> /// Get all bank accounts and the customer information /// </summary> /// <returns>Enumerable collection of bank accounts</returns> public override IEnumerable<BankAccount> GetAll() { var currentUnitOfWork = this.UnitOfWork as MainBCUnitOfWork; var set = currentUnitOfWork.CreateSet<BankAccount>(); return set.Include(ba => ba.Customer) .AsEnumerable(); } #endregion }