真北群专题分享:领域驱动&测试驱动 简介

真北群专题分享:领域驱动&测试驱动 简介


时间:4月18日周四晚8:30~9:30


分享嘉宾:

邓志国,1997年毕业于浙江大学工业自动化专业,从事软件开发20余年,现任八九灵技术总监。在敏捷、领域驱动开发、测试驱动开发、微服务上有一定经验。


流程:

1. 群分享:图+文+语音

2. 问答

3. 自愿赞赏

4. 整理发布


大纲:

  • 为什么要DDD

  • 领域层

  • 实现层

  • 门面层

  • 防腐层

  • 对领域层进行TDD




640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg




以下为问答,不带邓老师名字的部分为群友提问:



21:06

保持domain曾的先进性与纯洁性


邓志国
必须的


邓志国
我在Domain层唯一一次引用了第三方库:加密解密算法库


感觉像mybatis的语句还是有必要测啊。有什么好的实践么


想问下,如果是微服务框架下,高并发下跨服务增改失败回滚的这种场景应该如何编写单元测试


目的是校验回滚的可靠性


邓志国
Mybatis我也觉得有时候需要测试,我的做法是,再写一个Module,简单的实现Controller,然后调用用例进行测试,不过这不是单元测试,可以称为协议测试。


邓志国
这个我觉得不是单元测试能解决的。如果你把跨服务事务调用作为一个产品,应该是对这个产品的集成测试。

21:10


当A,B两个业务共用的一个业务发生逻辑变化,A需要使用新逻辑,B需要使用旧逻辑的时候,如何处理?假设A,B都写日志,本来日志都写到数据库,新的业务是A需要把日志写到网络而B写到数据库


邓志国

单元测试,我们一般是指一个业务领域下的,一般局限于某一个业务用例的测试


邓志国
业务上,我不建议两个业务领域再共同依赖一些除了基本工具类外的东西,这样会造成业务领域相互耦合。


邓志国
每个业务领域都应该独立,相互不知道对方存在,用独立的数据库表


邓老师,还有一个问题,在企业缺乏领域专家的时候,统一建模比较难,有什么经验,比较方便的检验模型的正确性吗?


针对soa分布式架构,不同应用之间有业务关联的部分要怎么处理?


邓志国
这个我的一些方法可以参考,在项目开始,大家群策群力,把业务里面的名词都找出来,包括角色的名词,各种业务的名词,当你名词都找出来,业务领域也就冒出来了。


比如商品库存和订单,这在领域上应该是2个业务领域。但是订单发货要修改单据状态并减去库存,这个在DDD里该怎么做呢

21:14


邓志国

这个通过防腐层来做。比如在订单的业务领域,声明一个扣除库存的接口,然后在上层业务中,实现这个接口,并通过调用库存领域来实现。


定义一个发货领域吗?



邓志国
不用。比如在订单领域,定义一个SkuRepository接口,里面有个扣除库存的方法。然后这个接口,在上层应用中去实现,而不是在订单领域实现。


邓志国
我举个例子


邓志国
我在Lock的领域,有时候需要用到用户信息,需要获取用户姓名,那么我声明一个接口。


640?wx_fmt=png

640?wx_fmt=png



邓志国
然后在应用中,我实现了这个接口,通过调用User领域来实现。



这里的userContact 对于lock来说是个值对象?


邓志国
也不是,只是不是Lock里面的实体,是Lock需要从外部获取的信息。

21:20


那事务处理也在防腐层做?


邓志国
是的


邓志国

640?wx_fmt=png



邓志国
比如这样


邓志国
除非你有特殊的事务需求,也可以在实现层做


邓志国
Facade、实现层,都可以做事务


用分布式事务还是什么来实现呢?


邓志国

这个就看情况了,如果你是通过共享库的单体应用,直接可用数据库本身事务


邓志国
如果你是分布式的应用,那么就需要分布式事务了。

21:24


邓志国

一般情况下,我不建议着急上微服务,微服务带来的代价,很多情况下多于好处。


邓志国
https://github.com/bobdeng/tenant  一个公租房租户的业务领域以及实现


邓志国
欢迎指正

21:40


邓志国
这是我目前关于DDD和TDD的领悟,欢迎批评指正。



时间到,今天我们的正式分享到此,非常感谢@邓志国 老师的精彩分享和@所有人 的积极参与。大家还可就此话题随意交流。如有人愿意做群专题分享,请联系我(微信glenwangcn,新朋友备注:真北敏捷)



如有收获,请对邓老师赞赏支持。

640?wx_fmt=jpeg


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值