对领域驱动设计的初步认识(二)
对于上一个帖子,大家有一些讨论。有人说“领域驱动设计”非常好,也有人说“领域驱动设计”有问题。其实大家都有道理,我针对大家的讨论进一步谈一下自己的认识。
先谈谈现实业务中的问题域模型,这个模型不是“领域驱动设计”一书中的“领域”,那个“领域”更侧重强调是“领域模型”。可惜目前似乎还没有一种办法能够去立体化并动态地完整描述这个“问题域模型”。为什么我要强调这个东西,就是让大家想一想我们为什么要需要“领域驱动设计”。其实我们有一个永恒的技术使命,就是要解决“问题域模型”的变化问题,因为“领域模型”会存在与”问题域模型“不匹配的问题,这个可能是时间变化或者用户场景变化的原因造成的。对”领域模型“的检验标准就是看是否能适应”问题域模型“的变化,其中”开闭原则“是在这里适用的。
所以对"领域驱动设计"的第一层”驱动“的含义,我觉得是"问题域模型"驱动"领域建模"以及"测试建模"。从这一点来说,"领域驱动设计"是适合一切场景的,而有人说”领域驱动设计“有问题,准确地来讲是目前的"领域建模技术"还不完善,当然也可以说是"领域建模技术"的运用有问题。这就像最近有人说"面向对象编程走错了路",其实并不是真的说OO错了,而是说"传统OO"有很大的缺陷,首先第一条就是"没有面向消息的传递机制"。
对于有人说“领域建模”只适应“稳定领域”,我并不赞同。我认为领域建模的真谛是认清业务发展变化的脉络,其最高境界就是“庖丁解牛”。因为真实世界中并不存在“稳定领域”,业务的变化是一种永恒。如果业务永远不变,那就我们就真的幸福了,只要满足用户需求,怎么设计都可以了。
关于"领域驱动设计"的第二层含义在上一个帖子里已经分析过了。
总结一下,"领域驱动设计" = “问题域模型驱动领域建模” + “领域建模驱动软件实现”。
呵呵,总算买了一本Eric的注释版,后面将真正进入“领域建模技术”的学习,望与大家共勉。另外,我也不赞同在远程交互中传递复杂的领域对象。
[该贴被flyzb于2010-10-14 23:06修改过]