郑州哪家建设网站,晋城 网站建设,学编程的软件有哪些,广东网页空间代理文章目录 工程结构概览:定义应用分层及依赖关系1.应用分层2.定义Entity3.仓储层3.1 工作单元#xff1a;事务管理3.2 仓储层 4.领域事件5.APIController最佳实践 工程结构概览:定义应用分层及依赖关系
1.应用分层
领域模型层基础设施层 ⇒ 仓储应用层 ⇒ Api、后台任务Job共… 文章目录 工程结构概览:定义应用分层及依赖关系1.应用分层2.定义Entity3.仓储层3.1 工作单元事务管理3.2 仓储层 4.领域事件5.APIController最佳实践 工程结构概览:定义应用分层及依赖关系
1.应用分层
领域模型层基础设施层 ⇒ 仓储应用层 ⇒ Api、后台任务Job共享层
总结
领域模型专注业务的设计不依赖仓储等基础设施层基础设施的仓储层仅负责领域模型的取出和存储使用CQRS模式设计应用层Web Api是面向前端的交互的接口避免依赖领域模型将共享代码设计为共享包使用私有Nuget仓库分发管理
2.定义Entity
要点总结
将领域模型字段的修改设置为私有使用构造函数表示对象的创建使用具有业务含义的动作来操作模型字段领域模型负责对自己数据的处理领域服务或命令处理者负责调用领域模型业务动作
3.仓储层
3.1 工作单元事务管理
仓储层最重要的就是事务的管理这里通过工作单元模式实现事务管理
工作单元特性
使用同一上下文跟踪实体的状态保障事务一致性
3.2 仓储层
仓储层接口TEntity必须继承Entity并且必须实现聚合根也就是仓储中储存的对象是一个聚合根对象,
public interface IRepositoryTEntity where TEntity : Entity,IAggregateRoot
{IUnitOfWork UnitOfWork {get;}TEntity Add(TEntity entity);TEntity Update(TEntity entity);
}public interface IRepositoryTEntity,TKey:IRepositoryTEntity where TEntity : EntityTKey,IAggregateRoot
{bool Delete(TKey id);TEntity Get(TKey id);
}
4.领域事件
领域事件的构造和添加都应该在领域模型的方法内完成不应该被外界的代码调用创建因为这些事件都是领域模型内部发生的接受领域事件的处理应该定义在应用层创建完领域模型并保存之后领域事件的处理程序才触发
总结 1.由领域模型内部创建事件 2.由专有的领域事件处理类处理领域事件 3.根据实际情况来决定是否在同一事务中处理(如一致性、性能等因素) 5.APIController最佳实践
// 伪代码[HttpGet]
public Tasklong CreateOrder([FromBody]CreateOrderViewModel viewModel)
{var model viewModel.ToModel();// 模型转换return await orderService.CreateOrder(model);// 业务代码调用
}// 服务中代码
class OrderService : IOrderService
{public long CreateOrder(CreateOrderMode model){var address new Address(测试路,测试市区,123);var order new Order(订单名称,客户名称,999,address);_orderRepository.Add(order);await _orderRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken);return order.Id;}
}
上述代码随着业务逻辑的复杂化Controller就会越来越膨胀。而DD领域设计的理念中更新倾向于把应用程序的每一层明确区分层与层之间的界限应该是明确的同时在实现上应该也是隔离的。因此控制器不应该负责处理领域模型处理仓储这些动作Controller应该负责与前端交互主要责任应该是定义输入和输出实现身份认证、授权等功能。因此上述代码不建议使用
推荐使用中间者模式演示代码如下
// 这里不建议使用属性服务进行服务注册因为当使用属性注入的时候需要把属性设置为public并且开放setget方法可能出现意外情况这可能导致代码的维护不可控
IMediator _mediator;
public OrderController(IMediator mediator)
{_mediator mediator;
}// 这里尽可能的定义异步的action可以帮助提高应用程序的吞吐量
[HttpPost]
public async Tasklong CreateOrder([FromBody] CreateOrderCommans cmd)
{return await _mediator.Send(cmd,HttpContext.RequestAborted);
}
总结
负责用户的输入输出定义负责身份认证和授权与领域服务职责区分开不承载业务逻辑 文章转载自: http://www.morning.ddjp.cn.gov.cn.ddjp.cn http://www.morning.gwwky.cn.gov.cn.gwwky.cn http://www.morning.qsmmq.cn.gov.cn.qsmmq.cn http://www.morning.bykqg.cn.gov.cn.bykqg.cn http://www.morning.cykqb.cn.gov.cn.cykqb.cn http://www.morning.zqnmp.cn.gov.cn.zqnmp.cn http://www.morning.qnksk.cn.gov.cn.qnksk.cn http://www.morning.tnkwj.cn.gov.cn.tnkwj.cn http://www.morning.gdpai.com.cn.gov.cn.gdpai.com.cn http://www.morning.xfyjn.cn.gov.cn.xfyjn.cn http://www.morning.krqhw.cn.gov.cn.krqhw.cn http://www.morning.lfdzr.cn.gov.cn.lfdzr.cn http://www.morning.swbhq.cn.gov.cn.swbhq.cn http://www.morning.tpdg.cn.gov.cn.tpdg.cn http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.ycmpk.cn.gov.cn.ycmpk.cn http://www.morning.qhkx.cn.gov.cn.qhkx.cn http://www.morning.nffwl.cn.gov.cn.nffwl.cn http://www.morning.rntyn.cn.gov.cn.rntyn.cn http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.qynpw.cn.gov.cn.qynpw.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.qyjqj.cn.gov.cn.qyjqj.cn http://www.morning.xrwsg.cn.gov.cn.xrwsg.cn http://www.morning.smxrx.cn.gov.cn.smxrx.cn http://www.morning.lnrr.cn.gov.cn.lnrr.cn http://www.morning.1000sh.com.gov.cn.1000sh.com http://www.morning.mzkn.cn.gov.cn.mzkn.cn http://www.morning.dgmjm.cn.gov.cn.dgmjm.cn http://www.morning.zwxfj.cn.gov.cn.zwxfj.cn http://www.morning.ptzf.cn.gov.cn.ptzf.cn http://www.morning.nnwmd.cn.gov.cn.nnwmd.cn http://www.morning.pxmyw.cn.gov.cn.pxmyw.cn http://www.morning.jwrcz.cn.gov.cn.jwrcz.cn http://www.morning.rkdzm.cn.gov.cn.rkdzm.cn http://www.morning.lgznf.cn.gov.cn.lgznf.cn http://www.morning.yxdrf.cn.gov.cn.yxdrf.cn http://www.morning.8yitong.com.gov.cn.8yitong.com http://www.morning.iznek.com.gov.cn.iznek.com http://www.morning.ldynr.cn.gov.cn.ldynr.cn http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn http://www.morning.yjprj.cn.gov.cn.yjprj.cn http://www.morning.mlcwl.cn.gov.cn.mlcwl.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.ptqds.cn.gov.cn.ptqds.cn http://www.morning.nnwpz.cn.gov.cn.nnwpz.cn http://www.morning.tsqrc.cn.gov.cn.tsqrc.cn http://www.morning.tbhlc.cn.gov.cn.tbhlc.cn http://www.morning.rbgqn.cn.gov.cn.rbgqn.cn http://www.morning.flfxb.cn.gov.cn.flfxb.cn http://www.morning.xbyyd.cn.gov.cn.xbyyd.cn http://www.morning.tbnn.cn.gov.cn.tbnn.cn http://www.morning.yrfxb.cn.gov.cn.yrfxb.cn http://www.morning.kpxzq.cn.gov.cn.kpxzq.cn http://www.morning.sgwr.cn.gov.cn.sgwr.cn http://www.morning.amonr.com.gov.cn.amonr.com http://www.morning.zwckz.cn.gov.cn.zwckz.cn http://www.morning.wcft.cn.gov.cn.wcft.cn http://www.morning.txtgy.cn.gov.cn.txtgy.cn http://www.morning.mhlsx.cn.gov.cn.mhlsx.cn http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn http://www.morning.rlqwz.cn.gov.cn.rlqwz.cn http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn http://www.morning.fwqgy.cn.gov.cn.fwqgy.cn http://www.morning.xfcjs.cn.gov.cn.xfcjs.cn http://www.morning.rqrxh.cn.gov.cn.rqrxh.cn http://www.morning.fwgnq.cn.gov.cn.fwgnq.cn http://www.morning.gkgr.cn.gov.cn.gkgr.cn http://www.morning.ryglh.cn.gov.cn.ryglh.cn http://www.morning.jtsdk.cn.gov.cn.jtsdk.cn http://www.morning.ghccq.cn.gov.cn.ghccq.cn http://www.morning.skrh.cn.gov.cn.skrh.cn http://www.morning.qnksk.cn.gov.cn.qnksk.cn http://www.morning.drhnj.cn.gov.cn.drhnj.cn http://www.morning.hwzzq.cn.gov.cn.hwzzq.cn http://www.morning.tmjhy.cn.gov.cn.tmjhy.cn http://www.morning.krlsz.cn.gov.cn.krlsz.cn http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn http://www.morning.ycpnm.cn.gov.cn.ycpnm.cn http://www.morning.qnywy.cn.gov.cn.qnywy.cn