现在的位置: 首页 > 综合 > 正文

领域驱动设计: Bounded Context and Model-Dependent Realism

2013年01月14日 ⁄ 综合 ⁄ 共 1590字 ⁄ 字号 评论关闭

Bounded Context

人们总是试图建立一个统一的模型, 某种一致的描述. 物理定律表现出来的一致性震撼人心, 是相对成功的例子. 绝大多数人都相信自然界存在一个终极的理论来描述宇宙的本质.  物理学的历史也就是不断趋近这个终极理论的历史, 不断有各种彼此独立彼此矛盾的理论被新的更一致的理论所统一.  比如目前前沿物理学家正在致力于统一自然界的四种力: 强力, 弱力, 电磁力, 引力. 目前已经有理论可以统一前三种, 只剩引力游离在外.

受此启发, 很多开发者也相信在某个企业的业务领域中, 存在一种统一的模型. 一旦我们找到这个模型, 代码会变的简单一致, 容易理解.

听上去合情合理. 让我们再深入观察一下这一点.

宇宙的终极定理尚未发现, 而牛顿定律, 麦克斯韦电磁方程都已经被发现在更微观领域的局限性. 如果LHC对撞出的中微子真的证实比光速快, 则相对论的前提不复存在, 因而其结论也会备受怀疑. 也就是说, 它们都不是最终的模型. 但这并不妨碍我们依此发展出现在的科技, 依此来发明创造新的工具来解决生活中各种问题. 也就是说即使我们依据一个并不完善的理论也可以工作的很好. 这里的关键, 是理论的有效范围. 一个经典例子是GPS. 如果根据经典理论来设计GPS, 会有较大的误差, 考虑相对论效应, 则可以使误差降低到可以接受的范围内.

而在软件开发领域发生的事情也暗合同样的轨迹. 看过报道说几年前曾经有一股潮流(或者是个例), 就是有的企业试图为自己的应用建立全企业范围的统一模型, 结果就像物理定律的统一过程一样, 历尽艰辛但几乎永远无法到达目标. 相反的是, 针对某个具体的子领域建立自己的局部模型, 而在领域间交流时通过模型的互相映射的尝试却较为成功, 较为实际的解决了问题.

这就是实用主义的Bounded Context.

 

Model-Dependent Realism

人们总是试图建立一个本质的模型,  某种客观的描述. 物理定律表现出来的客观性震撼人心, 教会都已经为哥白尼和伽利略平反了.  绝大多数人都相信自然界存在一个客观的理论来描述宇宙的本质.  这被称为决定论者. 比如目前决定论物理学家正在致力于调和相对论和量子力学不可调和的矛盾, 因为他们实在不喜欢量子力学的不确定性. 

开发者也不喜欢不确定性. 他们相信在具体的业务领域中, 存在一种本质的模型. 一旦我们找到这个模型, 代码会变的简单一致, 容易理解.

听上去合情合理, 毕竟软件建模的是宏观世界, 远离不确定的微观世界. 让我们再深入了解一下更大范围内物理学家的想法

霍金在最近出版的<<大设计>>中提出了依赖模型的实在论: "实在性的幼稚观点和现代物理不相容。为了对付这样的自相矛盾,我们将采用一种称之为依赖模型的实在论的方法。它是基于这样的观念,即我们的头脑以构造一个世界模型来解释来自感官的输入。当这样的模型成功地解释事件,我们就倾向于将实在性或绝对真理的品格赋与它,并且组成它的元素和概念。但是在为同样的物理场景作模型时,也许存在不同的方法,每种方法使用不同的基本元素和概念。如果两个这样的物理理论或模型都精确的预言同样的事件,人们就不能讲一个模型比另一个更真实;说的更精确点,哪个模型更方便我们就随意地使用哪个"

有这样想法的物理学家不在少数. 从实用性的角度来讲, 它工作的很好. 它同时也符合我们更熟悉的另外一种表述: 模型本身没有优劣, 除非把它们置于同一个问题上下文中. 换句话说, 模型由手头的问题决定, 而不是某种本质客观的东西.

举个例子: 如何建模电影院里的椅子?对号入座的话就是Entity, 不对号的话就是Value Object

任何一个 Domain 都有 Model; 但Model并不是某种本质的东西, 而是完全由需求或者使用方式来决定, 也就是Model是由对系统的使用方式决定的

这与依赖倒置原则也是契合的: 接口不应该由低层模块来决定, 而应该由问题域定义的抽象来决定. 实际上, 接口定义就是Model的体现形式

抱歉!评论已关闭.