答疑:有关3个典型问题的讲解
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
领域驱动设计(DDD)是软件开发中的重要方法论,本文围绕三个典型问题展开讲解。首先,对领域划分和限界上下文的关系进行了详细阐述,强调了领域模型的重要性和演进过程。其次,聚合设计中的工厂和仓储模式以及依赖倒置(DIP)的作用得到了解释,强调了解耦应用逻辑和基础资源的重要性。最后,针对领域事件采用消息异步机制的一致性问题和微服务内聚合之间领域事件的使用,提出了解决方案和建议。文章内容深入浅出,为读者提供了宝贵的实践经验和解决问题的思路。
《DDD 实战课》,新⼈⾸单¥59
全部留言(28)
- 最新
- 精选
- hunter基础层依赖领域层。能录个例子吗?如何反转依赖的,还是不明白
作者回复: 一个非常简单的例子,有Person聚合根,Person仓储接口和仓储实现。 /** * Person聚合根 */ public class Person{ private String id; private String name; private int age; private boolean gender; } /** * Person仓储接口 */ public interface PersonRepositoryInterface { void save(Person person); void delete(String id); } /** *Person仓储实现 */ @Repository public class PersonRepositoryImp implements PersonRepositoryInterface { private PersonMapper mapper; public void save( Person person) { mapper.create(person); } public void delete((String id) { mapper.delete(id); } } 在应用逻辑中直接用仓储的接口就可以了,数据库相关的逻辑在PersonMapper里面实现。 PersonRepositoryInterface personRepos; personRepos.save(person)
2019-11-071019 - C J J对失血,贫血,充血解释得很不错的文档。https://www.infoq.cn/article/alibaba-freshhema-ddd-practice
作者回复: 感谢,写的很好。
2020-01-15918 - 小超人“依赖倒置”不看定义我还一直因为是基础层依赖领域层。看了定义才知道,原来是基础层和领域层互相不依赖,而是共同依赖一组抽象接口。我觉得“面向接口编程”听起来更舒服。
作者回复: 是的。依赖倒置的定义就是面向接口编程,这样不同层之间的服务在实现逻辑发生变化的时候,就不会相互影响了。
2020-05-29312 - Paul老师,您好!有一些设计实现上的疑问: 领域服务的CRUD是不是都是操作聚合根或整个实体对象,比如我只想根据ID判断记录是否存在,或者返回个别字段,需要返回整个实体对象吗?
作者回复: 其实查询类业务可以不必经过聚合根和仓储。传统方法也可以了。 如果聚合数据比较多,会有延迟加载影响性能。 聚合根的主要目的是为了保证数据的一致性,这些场景一般在CU的场景。
2019-11-0728 - 南山老师,实体内可以调用他所在聚合的仓储吗?
作者回复: 一般通过聚合根来做。
2019-11-068 - 骆驼1089老师,有个问题请教一下,充血模式的优势是什么,比现有的贫血模式的优势是什么?
作者回复: 先只从领域建模的角度来说优势吧。因为DDD是一种面向对象的编程方式,采用充血模型,每个实体就会有自己的业务行为,在领域模型设计时,每一个实体除了自己的属性外,还会有自己的业务行为,而不会将所有的业务逻辑放到业务逻辑层。这样就有利于实体、聚合的解耦。当你需要进行再次拆分的时候,就会很容易。
2020-04-0636 - Jade事件总线 实现思路?用到什么技术或来源组件?还是说事件总线就是消息队列呢
作者回复: 事件总线就是一个带发布和监听功能的jar包,直接跟你的微服务代码放一起就行了,它属于基础层的代码。提的比较多的是EventBus。你可以去网上找找资料。
2019-11-0664 - hunter微服务内不使用事件总线,如何保证两个聚合操作的一致性?
作者回复: 这个需要权衡,看看引入事件总线后,这个复杂度可不可以接受。通过应用服务加事务机制应该也可以解决,在同一个进程内的事务应该比跨微服务的事务相对来说还是好控制,对性能影响也会小一些吧。
2019-11-072 - 秋雨老师你好,我有一个问题想问下: 现有事件风暴再有领域模型还是先划分好领域,再通过事件风暴建立领域模型?
作者回复: 领域太大的话,建议先划分子域。这是因为领域太大,不好开展事件风暴。在将领域划分成合适大小的子域后,进行事件风暴完成领域建模就比较容易了。
2020-03-2621 - 小谢同学子域划分的过程更偏业务侧工作,然后基于每个子域进行事件风暴(讨论)的时候,就是在梳理领域对象的过程,且发掘领域对象之后就可以分清楚哪些是值对象,哪些是实体哪些是聚合根?是这样理解吗
作者回复: 是的。
2020-02-141