版本 | 日期 | 备注 |
---|---|---|
1.0 | 2021.8.22 | 文章首发 |
1.1 | 2021.8.26 | 增加对于核心思想的描述 |
1.2 | 2021.9.4 | 加强图文描述对于DDD并不是只有三层到四层小节 |
4. DDD能解决什么样的问题 一般软件会经历几个不同的周期:
DDD主要在技术密集型应用里有较大的作用,尤其是当该应用进入服务化、平台化时,可以在:“服务拆分”、“服务治理”、“领域收敛”、“领域自治”发挥。在中台化中的“数据打通”也有一定的作用。
而微观来说,DDD可以有效减少代码的冗余程度以及需求响应的速度。
5. DDD实践中要注意的
5.1 使用IOC来保证层次之间的隔离
经常有小伙伴问我,分层之间该怎么做?因为分层的边界没做好,代码会再度耦合再一起。对此我给出的答案是参考inversion of control
。其常见实现有:
也可以参考我之前写的文章:技巧:遵循Clean Architecture写好白盒测试。 5.2 模块分离 模块分离是一种较为“硬”的手段,它让分层不再是一个约定,而是强制执行的规则。这样当我们拆分微服务时候,也可以较快的完成拆分。 5.3 DDD并不是只有三层到四层 也有小伙伴问过我,转DDD的是否只有三层过来的?其实并非如此。我这边可以举两个例子: 5.3.1 流计算处理 我们以面向在线数据加密应用为例子:当一条数据流过我们的应用时,我们需要根据一些条件对其加密。
那么代码中,kafka其实是基础层的代码。而encryption
属于领域层,map(框架)和encryption之间的胶水代码则属于基础层。
5.3.2 GUI应用
相信大家都在学生时代学过GUI or HTML 编程。那么按照DDD的做法来,业务逻辑应该与具体的界面无关——比如界面上的一个按钮(数据模型)会触发一种事件,当后台的事件接受者收到这个事件时,则会寻找相应的执行者,执行对应的逻辑。
在这里面: