领域驱动设计初级篇ppt课件.pptx

上传人:小飞机 文档编号:1369546 上传时间:2022-11-15 格式:PPTX 页数:65 大小:2.71MB
返回 下载 相关 举报
领域驱动设计初级篇ppt课件.pptx_第1页
第1页 / 共65页
领域驱动设计初级篇ppt课件.pptx_第2页
第2页 / 共65页
领域驱动设计初级篇ppt课件.pptx_第3页
第3页 / 共65页
领域驱动设计初级篇ppt课件.pptx_第4页
第4页 / 共65页
领域驱动设计初级篇ppt课件.pptx_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《领域驱动设计初级篇ppt课件.pptx》由会员分享,可在线阅读,更多相关《领域驱动设计初级篇ppt课件.pptx(65页珍藏版)》请在三一办公上搜索。

1、领域驱动设计DDD,应对复杂性之道,广告,目录,什么是领域驱动设计?为什么使用领域驱动设计?和其它设计方法的比较。什么是领域模型?FAQ。,什么是领域驱动设计?,英文名字:Domain Driven Design。缩 写:DDD。概 述:DDD是一种以领域为核心的设计和开发理念。DDD通过维护一个深度反应领域概念的模型,以及提供了可行的经过实践检验的大量模式来应对领域的复杂性。,流程,领域,用例1,用例2,用例n,模型,规则,参与,参与,问题空间,驱动,领域,设计,映射(聚合模式),方程,映射(仓储模式),映射(其他模式),设计,解空间,聚合,仓储,其他类型,跨越鸿沟,用户视图,开发视图,概念

2、模型,用例规约,领域模型,应用服务,DDD,为什么使用领域驱动设计?,为了应对快速变化,为了应对复杂性,为什么能应对复杂性?,系统,模块,聚合,分而治之,模块,应用层,领域层,技术维度,业务维度,时间维度,迭代,迭代,注意,复杂性来源于业务本身,DDD帮我们合理的应对复杂性,而非降低复杂性。,为什么能应对快速变化?,概念模型,直接的映射,领域模型,更高层次的编程,注意,变化是必然,随着时间的流逝,领域会发生变化,我们对领域的认识也会发生变化,要做的只有拥抱变化。,心态决定一切,和其它设计方法的比较,领域,50米,数据库驱动,面向对象分析和设计,100米,领域驱动,1米,痛苦指数,只缘身在此山中

3、,如果您已经使用领域的概念进行编程( OO、OP、FP和SQL等),那么恭喜您!您已经掌握了“领域驱动设计”的核心了 。,客户导向,如何接近领域进行编程?,将概念显式化,统一语言,中文编程?,什么是领域模型?,界限上下文,聚合,实体,值对象,服务,清晰的边界,没人喜欢蜘蛛网。,订单的领域模型,领域模型在架构中的位置,架构示例,SPI,领域模型及相关概念,领域模型,实体有业务生命周期,使用标识进行跟踪。值对象无业务生命周期,用来描述实体。服务无状态的行为类型,表示某种能力。,现实世界,实体,软件世界,Employee,Leave Application,需要被跟踪是重点,名词都是实体吗?,只有需

4、要被跟踪的名词才是实体。,值对象,哪一张都行!,容易混淆的值对象,基础资料管理,政治面貌,人力资源管理,员工,政治面貌,为什么值对象是不可变的?,百度一下为什么原子类型是不可变的。,列表做为值对象,列表必须做为一个整体拥有值对象的语义。如:String是Char的列表,String是值语义(Java和C#等多数语言是如此,Ruby中则不然)。,值语义的实体,因为值语义能带来一定的安全性,某些实体为了拥抱这个优点就使用值语义。,实体间的关系,万物皆有关系。关系越多,耦合越大。找出整个业务生命周期都依赖的关系,某些关系或许只在对象创建时刻有意义。可以用标识间接表示关系。尽可能的简化关系。尽可能的避

5、免双向关系。,聚合,聚合是一簇相关联的对象,出于封装的目的,将这些对象作为一个单元(业务、持久化和并发)。每个聚合都有一个边界和一个根。边界定义了聚合中应该包含什么。根是聚合中唯一允许被外部引用的元素,在聚合边界内,对象之间可以相互引用。聚合根使用全局标识,由仓储负责其持久化相关的生命周期,实体使用局部标识,由聚合根负责其持久化生命周期。,工作流-概念模型,工作流-流程定义聚合,工作流-流程实例聚合,聚合的一致性,聚合内的一致性由聚合自身负责维护。跨聚合的一致性由服务负责维护。这里不会谈“最终一致性”。,一致性的最高目标是啥?,应用层随意的使用领域模型,不会导致模型处于非法的状态(反射除外)。

6、,订单的一致性,订单的一致性,OrderItem的Subtotal = OrderItem的Quantity * OrderItem的Price。Order的Total = Order的所有OrderItem的Subtotal之和。Order的OrderCode必须唯一,编码规则最好能方便自定义。XXX其它信息验证规则。,如何保证聚合内的一致性?,对聚合内的任何修改都要经过聚合根,聚合根负责一致性检查。聚合内除了聚合根之外的实体只能被临使用。值对象因为拥有了值语义,天生安全。,订单-封装集合,订单-状态模式,如何保证跨聚合的一致性?,马上会讲到服务,聚合的生命周期,开始,透明,Factory.

7、Create(),Repository.Add(),持久化,Repository.Load(),未变化,this.Change(),已修改,Repository.Update(),订单-工厂,信息专家模式,如果将职责分配给某个类型,则这个类型必须拥有完成职责所需的信息。,工厂封装了领域模型的创建职责。仓储封装了聚合的持久化职责。实体和聚合根封装了保证自身一致性的职责。,服务的职责是什么?,服务,服务封装了保证跨聚合一致性的职责。,会不会有胖服务呢?,转账服务示例,使用DCI替换服务,什么是DCI?,Context 选择 Data,让 Data 扮演 Role 执行 Interaction。,技

8、术上如何扮演Role?,开发期注入MixinTraitTemplate运行期间注入MixinDynamicProxyWrapper,转账场景示例,使用Domain Event替换服务,VS,最终一致性和异步事件,.NET:https:/,使用四色原型划分聚合,四色原型找到这样一个规律:某个团体(Party)的某个角色(PartyRole)在某个地点(Place)的某个角色(PlaceRole)用某个东西(Thing)的某个角色(ThingRole)做了某件事情(MomentInterval)。,和DCI有点关系吧?,四色原型,四色原型,PartyPlaceThing (PPT):用淡绿色表示,

9、常见的PPT有:部门、岗位、人员、地点、物品等。Description(Des):用淡蓝色表示,主要用来对PPT进行描述,常见的Des有:部门类型、岗位层级、人员类型、地点区域、物品分类等。Role:用淡黄色表示,主要表示PPT在某个场景下扮演的角色,常见的角色有:请假申请者、计划参与者等。MomentInterval(MI):简称MI,用淡红色表示,主要表示在一刻或一段时间内发生的一件事情,常见的MI有:部门移动、岗位移动、员工离职、销售出库等。,如何划分聚合?,PPT和MI毫无疑问是独立的聚合,MI可能有MIDetail,MIDetail包含在MI所在的聚合,MI是聚合根。Des要根据其是

10、否需要被跟踪来具体对待,如果需要被跟踪就是独立的聚合根,否则是值对象。Role和DCI的Role应该一样,是一种组织代码的思路。,使用CQRS进一步分离职责,什么是CQRS?,CQRS是Command Query Responsibility Segregation的简拼。CQRS建议将修改系统状态的模型和读取系统状态的模型给分开进行开发。,CQRS经典架构,CQRS容易产生的误解,CQRS必须采用EventSource吗?(否)CQRS必须采用In Memory吗?(否)CQRS必须采用DDD吗?(否)CQRS必须采用Command模式吗?(否)CQRS必须采用两个(读写)数据库吗?(否),FAQ,鸣谢,汤雪华: http:/,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号