上海品茶

您的当前位置:上海品茶 > 报告分类 > PDF报告下载

2018年如何让DDD落地.pdf

编号:96401 PDF 32页 38.63MB 下载积分:VIP专享
下载报告请您先登录!

2018年如何让DDD落地.pdf

1、?DDD?和坚AGENDA01为什么DDD落地难02从需求到代码03当需求发生变化时04把大象塞进冰箱01 为什么DDD难落地从2003年由Eric Evans提出DDD以后,在软件开发领域一直都是雷声大,雨点小。这几年之所以开始火起来,主要的功劳也要给队友“微服务”,那么这是为什么呢?DDD的目标是什么软件设计的门槛是什么DDD里难懂的概念谁来做领域专家?产品经理技术组长架构师系统分析师如何从需求到DDD?我想要一个电商平台,我可以在上面卖东西?Event Storming里缺少了什么信息提交订单的时候要做什么检查?如何添加商品?支付订单的时候和支付宝对接的逻辑是什么样的?魔鬼隐藏在细节之中

2、今天既然是讲落地,那么就从一个实际需求出发,我们看看如何把需求拆解成用户故事,然后如何把用户故事转变成领域故事,最后领域故事又如何变成为代码。02 从需求到代码京西商城的需求产品运营人员可以添加新的商品,编辑产品库存,并发布到京西商城,用户可以进行购买;京西商城的买家可以查看产品可购买的库存数量,并生成购买订单,买家可以撤单,查看订单的状态,对订单进行支付(支付宝)。支付成功后,仓储管理员会收到出库请求,进行配货并发货。同时,买家可以查看物流状态以及确认收货。事件风暴的结果事件风暴得到的命令和事件就没用了吗?订单 已创建库存 已锁定提交 订单用户SubmitOrderCommandOrderC

3、reatedStockLocked订单聚合创建订单服务接收仓库聚合的事件订阅者仓库聚合锁定库存服务发送LockStockCommand生成生成接收生成QueryOrderCommand订单域查询服务接收OrderList生成需求分析到用户故事Story6 创建订单 作为一个商城顾客 我可以确定购物车中的商品和数量,然后提交商品订单 为了在商城上购买商品Acceptance Criteria 1-Given:导航【购物车】-When:确定购物车中要提交的商品和数量,然后点击提交;-Then:订单成功提交,从商品库存中锁定订单的数量,提示气泡“商品已保存成功”-And when:如果订单的数量超过

4、商品库存中可以锁定的数量-Then:订单无法成功提交,提示气泡“库存数量不够,仅剩X件”用户故事到领域故事点击提交按钮后1.订单API控制器会收到创建订单请求,然后根据请求生成创建订单命令,然后让创建订单应用根据创建订单命令创建商品2.创建订单应用收到命令后,先调用查询商品库存服务查找商品库存,如果商品库存可以支持订单数量,就让创建订单服务根据创建订单命令进行订单创建,创建成功后返回成功结果给订单API控制器如果商品库存不支持订单数量,返回出错结果和原因给订单API适配器 3.创建订单服务收到命令后,会把创建订单命令转换成订单,然后调用订单仓库进行保存,保存成功后会让事件发布器发布订单已创建事

5、件 4.事件发布器会根据事件类型把订单已创建事件转发给商品库存订阅者,5.商品库存订阅者收到事件以后会根据事件中的商品ID和订单数量创建锁定商品库存命令,然后给锁定商品库存服务进行库存锁定6.锁定商品库存服务收到命令后,会把根据命令中的商品ID从商品库存仓库中获取商品库存,然后根据让商品库存锁定订单数量,之后调用商品库存仓库进行保存,最后让事件发布器发布商品库存已锁定事件.领域故事中的主要对象领域对象类型命名订单API控制器AdapterOrderController创建订单命令CommandCreateOrderCommand创建订单应用ApplicationServiceCreateOrd

6、erApplication查询商品库存服务DomainServiceQueryStockService商品库存EntityStock订单EntityOrder订单仓库RepositoryOrderRepository订单已创建EventOrderCreated商品库存订阅者SubscriberStockEventSubscriber锁定商品库存命令CommandLockStockCommand锁定商品库存服务DomainServiceLockStockService商品库存仓库RepositoryStockRepository商品库存已锁定事件EventStockLocked领域模型如何区分实

7、体和值对象?VS?Id?/?Order/Car?Equals()?/?(Immutable)?Address/Color如何区分应用服务和领域服务应用服务(很薄,没有业务逻辑)领域聚合A领域聚合B领域聚合C领域服务领域服务领域服务X领域服务之间最好不要相互直接调用使用什么架构六边形架构为什么是六条边领域故事中的对象怎么对应到架构上命名OrderControllerCreateOrderCommandCreateOrderApplicationQueryStockServiceStockOrderOrderRepositoryOrderCreatedStockEventSubscriberLoc

8、kStockCommandLockStockServiceStockRepositoryStockLocked领域层不应该有任何外部依赖细节OrderController适配器层领域层CreateOrderApplicationOrderRepositoryJPAAPIDBOrderRepositoryMybatis订单聚合仓库聚合领域层领域故事如何变成代码创建订单服务收到命令后,会把创建订单命令转换成订单,然后调用订单仓库进行保存,保存成功后会让事件发布器发布订单已创建事件 软件中最痛苦的就是需求经常发生变化,这也是DDD想要解决的问题之一,03 当需求发生变化时为什么需求会变化?需求提出者

9、不一定想好了需求提出者的问题变化了沟通过程信息丢失需要增加一些业务逻辑时3.创建订单服务收到命令后,会把创建订单命令转换成订单,然后调用订单仓库进行保存,保存成功后会让事件发布器发布订单已创建事件 4.事件发布器会根据事件类型把订单已创建事件转发给商品库存订阅者,订单日志订阅者5.6.7.订单日志订阅者收到订单已创建事件后,会根据事件创建添加订单日志命令,然后调用添加订单日志服务来进行添加8.添加订单日志服务收到命令后,会把添加订单日志命令转换成订单日志,然后调用订单日志仓库保存订单日志Acceptance Criteria 1-Given:导航【购物车】-When:确定购物车中要提交的商品和

10、数量,然后点击提交;-Then:订单成功创建,从商品库存中锁定订单的数量,订单日志需要记录这笔订单创建,最后提示气泡“商品已保存成功”-And when:如果订单的数量超过商品库存中可以锁定的数量-Then:订单无法成功提交,提示气泡“库存数量不够,仅剩X件”需要拆分时坚持使用事件进行服务间交互Mediator拓扑架构Broker拓扑架构打开冰箱,塞进大象,关上冰箱04 把大象塞进冰箱分几步把需求落地需要几步把领域故事转换成代码转码用事件风暴划分业务边界划界用实现细节编写领域故事透视创建订单服务收到命令后,会把创建订单命令转换成订单,然后调用订单仓库进行保存,保存成功后会让事件发布器发布订单已创建事件 THANK YOU

友情提示

1、下载报告失败解决办法
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站报告下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。

本文(2018年如何让DDD落地.pdf)为本站 (云闲) 主动上传,三个皮匠报告文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三个皮匠报告文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
会员购买
客服

专属顾问

商务合作

机构入驻、侵权投诉、商务合作

服务号

三个皮匠报告官方公众号

回到顶部