DDD解决的是 软件开发的复杂度问题 只有应用在大型项目上才能产生最大的收益
DDD 可以应对以下问题:
-
没有对行为的重用,也没有对业务问题的抽象,每当操作用到业务规则时,都要重复这些业务规则。
-
快速的原型建立和迭代很快会达到其极限,因为抽象的缺乏限制了重构的选择。
-
复杂的功能很快会让你无所适从,所以程序的扩展只能是增加简单的应用模块,没有很好的办法来实现更丰富的功能。
“复杂”其实覆盖了 Complicated 与 Complex 两个方面。要理解软件复杂度的成因,就应该结合理解力与预测能力这两个因素来帮助我们思考。
影响理解力的第一要素是规模。
软件开发的拥堵现象或许更严重:
-
函数存在副作用,调用时可能对函数的结果作了隐含的假设;
-
类的职责繁多,不敢轻易修改,因为不知这种变化会影响到哪些模块;
-
热点代码被频繁变更,职责被包裹了一层又一层,没有清晰的边界;
-
在系统某个角落,隐藏着伺机而动的 bug,当诱发条件具备时,则会让整条调用链瘫痪;
-
不同的业务场景包含了不同的例外场景,每种例外场景的处理方式都各不相同;
-
同步处理与异步处理代码纠缠在一起,不可预知程序执行的顺序。
结构成了决定系统复杂度的关键因素。
软件设计是不断拆分、继续拆分、持续拆分的微型化过程。
主要问题: 分解的软件元素 怎么协同、通信
导致软件系统变得复杂的成因是规模、结构与变化三要素,则控制复杂度的原则就需要对它们进行各个击破