- #问答与讨论
- 1.请教一个使用DDD事件风暴落地过程中的一个问题。
- 2.这里是不是写错了,应该是由用户可以驱动出决策命令。
- 3.请教一下,如何防止开发人员删代码?
- 4.各位大佬,微服务间做网络隔离有什么好的方案?
- 5.大家在Springboot开发时,有没有好用一点接口参数验证工具?
- 6.你们一般校验用javax 包下面的,还是hibernate validate 下面的
- 7.请问各位大佬,公司要做促销系统, 在下准备根据ddd的思想来做, ,但是想到要划分核心域, 通用域,支撑域的时候,针对于公司,整个促销系统都不是核心 , 是不是这里就直接整个系统都当做一个支撑域就行了?
- 8.NewSQL是什么?
- 9.不好意思,打扰一下,此群大佬众多,想问个跟ddd无关的问题,关于I/O多路复用知识点
- 10. UML图中的6w模型 只写了4个,还有 when和how ,怎么理解?
- 11. 咨询一下,张老师在文章中提到的EAS系统,有代码可以参考吗
- 12. 团队中,有人用golang语言实现的DDD吗?
- 13. 我们的定向开发思维,导致在对分层架构时很好理解;但对于六边型架构,虽然看过很多次,但还是不能想像出具体的代码实现。请问六边型架构有具体的源码吗?
- 14. 话说原系统就十来张表,重业务流程,存在许多中间态转换的系统,适合用ddd做改造吗
第1周
2020年01月09日 - 2020年01月18日
编辑|子鱼
#问答与讨论
1.请教一个使用DDD事件风暴落地过程中的一个问题。
[王喜春]
背景:电商履约过程中, 确定一个订单具体进哪一个仓的因素多, 以往的实现方式是把这些规则收集起来逐个实现。
问题:针对订单定仓的场景, 事件风暴中, 可能只有一句话, 表示成“订单已定仓”。
背后那些复杂的规则及规则之间的综合判断逻辑,没有体现出来, 也就不方便用DDD的思路改造。
请帮看下, 这样业务上可能一带而过但具体实现复杂的功能点, 怎么借助DDD改造优化下?
DDD倚天剑 [2019-01-17]
➤ 问题解答
[Antony] 定仓服务维护这些规则
[王喜春] 专门定仓服务的话,也不是不可以, 想看看DDD的事件风暴怎么处理这样的事件。
一般来说, 领域专家不关心具体的定仓逻辑。
这也是一类问题的通病。
[阿华] 定仓有这么多规则,这些规则应该是领域专家定的啊
[王喜春] 理论上可以这样, 不过具体实施上有些问题:
1. 公司没有领域专家。
2.有业务方, 不过业务方不稳定, 经常换人, 反倒不如落到代码上的经验具体和全面。
[右军] 可能是多维度的状态机
[因即果,果求因。] 请教一下,这个多维度的状态机是不是指,一条状态机线路,影响着另一条状态机线路呢?
[右军] 分开画吧,是否有影响 通过驱动事件
2.这里是不是写错了,应该是由用户可以驱动出决策命令。
[上海奕优网络科技-张闯]
DDD倚天剑 [2019-01-17]
➤ 问题解答
[鹏酱] 用户某一行为产生的也是一种事件
[张逸] 驱动是指设计的驱动力,不是指由谁触发
3.请教一下,如何防止开发人员删代码?
[维益-kevin]
请教一下,如何防止开发人员删代码?比如 程序把本地程序删除, 然后git push到主版本
DDD屠龙刀 [2019-01-10]
➤ 问题解答
[美团-andi轩] git都有历史记录的啊,首先禁掉push -f,然后引入code-review机制,比如master只可以使用merge request的方式合并,pull request
用git管理的代码是最不怕删的,做好权限控制和操作记录,都可追溯
[维益-kevin] 我的担心是,如果把整个代码仓库都删了呢?类似这种
[王大宝] 不要给这个权限啊,不是本人创建的没有删除分支权限
[熊节-extremeprogramming.cn-成都] 用github就没这问题了,revert就完了
这个故事告诉我们不要自己建数据中心,github它不香么?
[Simon] 即使 git push -f,已经在 git 仓库里的历史记录还在啊,如果实在不放心,可以写一个同步任务,定期把 git 仓库同步到备份机器就可以了,这些都是简单的 shell 就能完成的,https://www.jianshu.com/p/41cef45ef6ce
[X] git是分布式版本管理。。他不可能每个人的电脑都挨个删除一遍吧,即便删除了远端库。。
[张逸] 会什么情况,会担心这样的神操作啊,这其实不是技术问题,是团队管理与能力培养的问题,也是操作记录的问题。
4.各位大佬,微服务间做网络隔离有什么好的方案?
[小成]
DDD屠龙刀 [2019-01-10]
➤ 问题解答
[反应慢] 为啥要隔离,微服务互相调用才能对外提供服务
[Wales Kuo] 一般运维会做这个时。做安全性隔离分区
5.大家在Springboot开发时,有没有好用一点接口参数验证工具?
[Boxing]
DDD屠龙刀 [2019-01-15]
➤ 问题解答
[反应慢] hibernate提供的,静态校验差不多够用了
包含业务逻辑的校验还是要自己处理的
6.你们一般校验用javax 包下面的,还是hibernate validate 下面的
[小松]
DDD屠龙刀 [2019-01-15]
➤ 问题解答
[Boxing] 我们用javax
[反应慢] javax是API,实现者是hibernate,hibernate比javax更丰富一点吧
7.请问各位大佬,公司要做促销系统, 在下准备根据ddd的思想来做, ,但是想到要划分核心域, 通用域,支撑域的时候,针对于公司,整个促销系统都不是核心 , 是不是这里就直接整个系统都当做一个支撑域就行了?
[ANSWER]
DDD屠龙刀 [2019-01-15]
➤ 问题解答
[Boxing] 把业务理解透了,自然就出来了
[美团-andi轩] 核心域是指你自己这个系统里面的核心
[脑洞云-张维] 相对概念,促销系统的话它也会有自己的核心。。,大的应该要说限界上下文,在这个限界上下文中,哪些是核心域 支撑域
8.NewSQL是什么?
[ANSWER]
DDD屠龙刀 [2019-01-16]
➤ 问题解答
[脑洞云-张维] https://zh.wikipedia.org/zh-cn/NewSQL
[上海泛融-郑承良] CockroachDB生产中有用吗,看介绍百度、网易对这个比较感兴趣。
https://github.com/cockroachdb/cockroach
[Wei] Cloud Native时代 Postgres -> cockroachDB MySQL -> Vitess/TiDB
9.不好意思,打扰一下,此群大佬众多,想问个跟ddd无关的问题,关于I/O多路复用知识点
[gaobo]
**有人能通俗讲解一下什么是多路复用嘛?
DDD屠龙刀 [2019-01-17]
➤ 问题解答
[长沙.NET社区·邹溪源] gitchat的电子书:《http/2 基础教程》这本书针对多路复用有详细的说明,你值得拥有
[反应慢] 一个路边摊只有一个摊主,接待客人的是他,厨子是他,上菜的也是他。但是他能同时服务的客人却不止一个。这是单线程的多路复用
大一点的餐馆,服务员和厨子分开,这是简单的多线程多路复用。
再大一点的,专门有招徕顾客的,这是boss线程,服务员和厨子是worker线程
[gaobo] @反应慢 我说下我的理解,帮忙指点一下是否错误
当使用IO多路复用时(比如使用epoll),那么每次发起一个socket请求,epoll都会监听这次发起的请求(发起10次socket请求,那么epoll就会监听10个socket,,阻塞epoll),
并返回当前线程(非阻塞),当epoll有返回值时,就会通知用户线程去执行操作(把数据从内核态缓冲区复制到用户态缓冲区),即epoll是同步非阻塞的?
epoll相当于一个hashmap,当前线程把它关注的事件放到了hashmap里就返回了。等io事件发生时,系统去map里找对应的回调
[薄军] 类似windows完成端口
10. UML图中的6w模型 只写了4个,还有 when和how ,怎么理解?
[威猛的小老虎]
DDD屠龙刀 [2019-01-17]
➤ 问题解答
[脑洞云-张维]
[威猛的小老虎] 找到了
11. 咨询一下,张老师在文章中提到的EAS系统,有代码可以参考吗
[队长,我还可以救一下]
DDD少林派 [2019-01-09]
➤ 问题解答
[张逸] https://github.com/agiledon/eas-ddd
12. 团队中,有人用golang语言实现的DDD吗?
[Godfrey]
DDD少林派 [2019-01-09]
➤ 问题解答
[someone] 菜鸟写的 github.com/ixre/go2o
13. 我们的定向开发思维,导致在对分层架构时很好理解;但对于六边型架构,虽然看过很多次,但还是不能想像出具体的代码实现。请问六边型架构有具体的源码吗?
[植辉]
DDD少林派 [2019-01-09]
➤ 问题解答
[Qiao Liang] 洋葱架构
https://youtu.be/o_TH-Y78tt4 bob martin讲的挺清楚的
[忘却录音] 整洁架构,微内核架构,架构设计模式 都是通过分离关注点,划分边界的方式。达到结构的清晰与一致
[lucoo] 阿里的cola https://github.com/alibaba/COLA 不过这个架构不一定好落地 适合自己最好
[孔令秋] 六边形架构的核心是隔离耦合,六边形架构将系统分为两个部分,系统的业务逻辑与系统依赖的其他部分(其他部分包括各种中间件,其他的微服务,数据库等等),六边形架构最好结合maven来使用,一个微服务对应一个project,一个project多个module,最核心的三个module分别是应用层,领域层,基础设施层,其中基础设施层引用其他两层,这样就实现了依赖倒置,依赖倒置也就隔离了耦合,同时单元测试也会变得容易
[阿斌哥] 六边形架构的入站适配器对应张老师所说的北向网关,出站适配器对应南向网关,入站端口对应应用服务,出站端口对应南向网关的抽象。依赖倒置的核心就在那一层南向网关的抽象
14. 话说原系统就十来张表,重业务流程,存在许多中间态转换的系统,适合用ddd做改造吗
[张智高]
例如我有这样的一个场景:
1.在后台加入一批物料
2.新建一个发送场景,关联在1中匹配的物料,配置防疲劳规则。如监听点赞事件
3.系统流程入口监听来自外部系统的异步消息,告知点赞事件到达
4.根据该事件找到2中创建的场景(匹配场景),取得关联的物料(物料匹配),并判断可发送的物料(校验防疲劳)
5.调用外部接口发送出去
6.数据效果回收
用流程的方式来写就很顺
DDD少林派 [2019-01-10]
➤ 问题解答
[龙文-GARY] 事件溯源了解一下,当状态发生变化时 酒产生一个事件,这个事件可以被多个上下文处理,异步消息 是发布事件得一种方式
[张智高] 这个我理解,但没看出来优势在哪。我每一个流程其实都是串行处理的,下一个流程的处理需要等待上一个流程处理完成,例如场景匹配没有做好,是不能进行物料匹配的
[龙文-GARY] 通过事务处理,最终一致性。或者强一致性,同个上下文。事务应该强一致,夸服务或者 夸上下文的 考虑最终一致性,或者弱一致性 如tcc,那处理完成 向下游发一个事件 可以不,
[张智高] 可能是我没有描述清楚,数据是这样的流转的:
匹配场景阶段:输入:用户,点赞;输出:场景ID
匹配物料阶段:输入:场景ID,输出:一批物料
前后会存在关联
[龙文-GARY] 我觉得最终一致性。比较好
上游处理完。在调用下游系统 ,调用下游的时候 要保证调用成功