OOA/OOD/OOP中,尤其是OOD/OOP,大家都不陌生,用了很多年。并且大部分人,都是从OOP开始,到了一定阶段,会再去接触OOD, 之后是OOA。
这样用久了,自然而然会觉得“面向对象”是天经地义的,不太会去想面向对象有什么问题所在。
而DDD里面,就很明确的指出了面向对象的2个问题,并给出了相应的解决答案。
问题1:面向对象擅长表达“结构”,不擅长表达“行为”
在面向对象里面,我们把系统里面所有东西都表达成对象 + 对象之间的关系,这样清晰的表达出了系统的“结构”。
但是对于“行为”,也acazacyzz'-xx,就是“流程”,通常被掩盖了。比如一个业务流程,它牵扯到好几个对象,那这个流程,反映在代码里面,就是对象与对象之间的引用和互相调用关系,这实际是一种“隐性表达”。虽然你可以画“交互图”,但这种交互图只能停留在设计层面,在代码层面,没有对应物。
所以DDD里面引入了“领域服务”,单独把重要的“行为”抽出来进行“显性”表达。
问题2:面向对象不擅长表达“业务规则”
业务规则,说到底也是种“行为”,而在代码里面,我们通常把业务规则表达成了对象的某个方法。
随着业务规则的复杂,这个方法也变得越来越难理解。所以设计模式里面有Strategy模式,对这种场景进行建模。
但设计模式主要偏重从技术角度去谈这个问题,DDD呢,把这个特意强调了出来。强调在业务分析的时候,就把“业务规则显性化”,为此引入了Specification模式。
总结
所以说,DDD其实是面向对象方法论的一个升华.
网友评论