DDD设计何时适可而止?

本文探讨了软件开发中的设计过程,强调了理解业务领域的重要性。通过高内聚和低耦合的概念,指出正确识别上下文环境是关键。建议在充分理解和学习后,依据领域职责进行代码组织,团队可以据此分工合作。同时,提醒注意简单软件架构的好处,认为在实践中寻找平衡点是一门艺术。
摘要由CSDN通过智能技术生成

无论是敏捷和瀑布,软件开发都有一个设计过程,实际也是了解知识准备过程,属于坐而论道,那么什么时候动手开干?

1. 首先,动手开干的标志是什么?见这篇文章:

按技术职责还是按领域职责来构建代码?
文章里谈了代码如何组织包模块,也就是com.jdon.XXX的设计,这个XXX设计不是拍脑袋想出来的,而是基于你对领域的理解,如果你对业务领域不理解,你会直觉按照技术职责划分,或者按照团队划分,如果你业务领域理解了,那么会按照领域职责划分。

2. 那么理解业务领域的标志是什么?见这篇文章:

如何实现软件设计中的高凝聚和松耦合?
你如果能找出业务领域的高内聚和低耦合的划分,基本说明你已经对业务领域理解了,那么com.jdon.XXXX的包层次结构就大概出来,可以分工开干了。

3. 但是,关键是在内聚和耦合了,这个问题是否好解决呢?
不一定,因为这取决于上下文环境:


远看一只虎,近看一条狗!
没有上下文的数据就是噪音! 上下文为王
这是数据科学领域的格言,那么同样适合在人对世界的认知中。
高聚合和低关联是依据上下文不同而不同的,也就是根据上下文环境做判断的,这是难点,因为如果你没有发现上下文的相关性,如同上图中,你没有发现铁栅栏投影到狗身上引起的条纹,这个上下文因素忽视了,那么内聚模型就建模建错了。

4. 那么到这里有什么诀窍吗?如果有,机器学习就战胜人类了,变成通用人工智能了。
所以,这就到艺术边缘,能子领域能聚合在一起就好了,单一功能职责划在一起就可以了,不必精益求精,因为已经到了艺术地步,不属于数学,再死磕就过了。
而且灵感不是死磕中出现,而是少做并学习后才出现:

程序员应该少做些"工作"

5. 好了,我们也死磕到此为止,话题一转,回到按照领域职责划分上:
com.jdon.xxxx.xxx.xxx.xxx的子包出来后,团队就要对齐这个领域划分包,每个团队承包一个子包,这就是:

DDD与团队拓扑以及微服务之间的关系图

6. 最后,再次提醒:

简单软件架构的一些好处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值