DDD -- 领域驱动设计 -- 面向对象(OOA/OOD)的缺陷

OOA/OOD/OOP中,尤其是OOD/OOP,大家都不陌生,用了很多年。并且大部分人,都是从OOP开始,到了一定阶段,会再去接触OOD, 之后是OOA。

这样用久了,自然而然会觉得“面向对象”是天经地义的,不太会去想面向对象有什么问题所在。

而DDD里面,就很明确的指出了面向对象的2个问题,并给出了相应的解决答案。

问题1:面向对象擅长表达“结构”,不擅长表达“行为”

在面向对象里面,我们把系统里面所有东西都表达成对象 + 对象之间的关系,这样清晰的表达出了系统的“结构”。

但是对于“行为”,也acazacyzz'-xx,就是“流程”,通常被掩盖了。比如一个业务流程,它牵扯到好几个对象,那这个流程,反映在代码里面,就是对象与对象之间的引用和互相调用关系,这实际是一种“隐性表达”。虽然你可以画“交互图”,但这种交互图只能停留在设计层面,在代码层面,没有对应物。

所以DDD里面引入了“领域服务”,单独把重要的“行为”抽出来进行“显性”表达。

问题2:面向对象不擅长表达“业务规则”

业务规则,说到底也是种“行为”,而在代码里面,我们通常把业务规则表达成了对象的某个方法。

随着业务规则的复杂,这个方法也变得越来越难理解。所以设计模式里面有Strategy模式,对这种场景进行建模。

但设计模式主要偏重从技术角度去谈这个问题,DDD呢,把这个特意强调了出来。强调在业务分析的时候,就把“业务规则显性化”,为此引入了Specification模式。

总结

所以说,DDD其实是面向对象方法论的一个升华.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • OOA:Object-Oriented Analysis面向对象分析方法 是在一个系统的开发过程中进行了系统业务调...
    楚易枫阅读 3,727评论 0 5
  • 有位朋友最近在为企业做领域驱动设计(Domain Driven Design)内训时,遇到一位资深学员向他抱怨该技...
    MagicBowen阅读 18,723评论 8 66
  • 首先要明白每个简写的含义, OO :Objec - Oriented ,面向对象,基于对象概念,以对象为中心,以类...
    高手世界阅读 11,096评论 1 32
  • 最近事情比较多,难以应付! 好在学过nlp,好在有这么多同行的人给予我支持,常常不经意的连接到你们,都能吸收到很多...
    空心1217阅读 121评论 0 0
  • 在这荒芜的世间 除了生死 哪一件不是闲事? 你 却超越了我的生死 如果说 我的整个生命都在虚度 那都是因为没有 你...
    青陽之裔阅读 188评论 0 4