`
chelsea
  • 浏览: 117737 次
  • 来自: ...
社区版块
存档分类
最新评论

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

    博客分类:
 
阅读更多

Bounded Context

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

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

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

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

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

这就是实用主义的Bounded Context.

 

Model-Dependent Realism

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

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

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

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

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

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

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

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

 

分享到:
评论

相关推荐

    领域驱动设计:软件核心复杂性应对之道

    《领域驱动设计:软件核心复杂性应对之道》是软件开发领域的经典之作,由领域驱动设计(Domain-Driven Design,简称DDD)的创始人埃里克·埃文斯所著。这本书深入探讨了如何处理复杂的软件系统设计,特别是针对业务...

    [领域驱动设计:软件核心复杂性应对之道].Eric.Evans.扫描版(ED2000.COM)

    《领域驱动设计:软件核心复杂性应对之道》是Eric Evans的经典著作,这本书深入探讨了如何在复杂的软件开发项目中有效地管理业务逻辑和模型。领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,...

    领域驱动设计:核心复杂性应对之道

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,由Eric Evans在其同名著作《领域驱动设计:核心复杂性应对之道》中提出。这本书深入探讨了如何通过与业务专家紧密合作,理解和建模复杂的业务...

    张逸-构建领域驱动设计知识体系_compressed.pdf

    ### 领域驱动设计(DDD)的知识体系构建 #### 一、领域驱动设计的历史回溯 **1.1 诞 生** - **里程碑之一**:2004年,Eric Evans出版了《领域驱动设计:软件核心复杂性应对之道》(Domain-Driven Design: Tackling...

    领域驱动设计与模式实践.pdf

    领域驱动设计(DDD)的中心内容是如何将业务领域概念映射到软件工件中。大部分关于此主题的著作和文章都以Eric Evans的书《领域驱动设计》为基础,主要从概念和设计的角度探讨领域建模和设计情况。这些著作讨论实体...

    领域驱动设计源码dddsample-core-dddsample-1.1.0

    领域驱动设计源码 dddsample-core-dddsample-1.1.0 version 1.1.0(2009-03-25) http://dddsample.sourceforge.net/ 这个地址下载比较困难,我下载了分享给大家。 One of the most requested aids to coming up to ...

    领域驱动设计_软件核心复杂性应对之道(1)

    领域驱动设计是一种软件开发的方法论,它强调以业务领域为核心,通过深入理解和建模业务领域的复杂性,为软件设计提供清晰的指导。在软件开发过程中,很多问题都源于对领域概念的误解,以及开发者与业务领域专家之间...

    领域驱动设计C#2008实现原代码

    9. **领域驱动设计的边界**:界限上下文(Bounded Context)用于定义领域模型的应用范围,确保不同部分的模型保持清晰且独立。 10. **战略模式**:如实体-值对象策略、子领域策略、通用语言(Ubiquitous Language)...

    领域驱动设计

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,由Eric Evans在其2003年的著作《领域驱动设计:软件核心复杂性应对之道》中提出。该书详细阐述了如何通过深入理解业务领域,将复杂的业务逻辑...

    实现领域驱动设计

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法,由Eric Evans在其同名著作《领域驱动设计:软件核心复杂性应对之道》中提出。这种方法强调将业务领域的复杂性作为软件设计的核心,通过与领域...

    微服务中的领域驱动设计.pdf

    领域驱动设计(DDD,Domain-Driven Design)是一种专注于软件核心复杂性领域的设计方法,强调从领域专家的知识中获取领域模型,并利用这些模型来指导软件设计。在微服务架构中运用领域驱动设计可以进一步提高系统的...

    领域驱动设计精简pdf版

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,由Eric Evans在其同名著作《领域驱动设计:软件复杂性应对之道》中提出。这种方法论强调以业务领域为中心,通过深入理解和建模业务领域,来...

    《实现领域驱动设计》PDF英文版本下载.txt

    在IT领域,特别是软件开发与架构设计中,《实现领域驱动设计》(Implementing Domain-Driven Design,简称IDDD)是一本极具影响力的书籍。本书由 Vaughn Vernon 编写,是领域驱动设计(Domain-Driven Design,简称...

    《实现领域驱动设计》中的源码(java版 & C#版)

    《实现领域驱动设计》这本书是Eric Evans的经典之作,它深入探讨了如何在软件开发中运用领域驱动设计(Domain-Driven Design, DDD)方法论。DDD是一种将业务领域知识与软件开发紧密结合的设计策略,旨在提高复杂系统...

    领域驱动设计-精简版

    领域驱动设计(Domain-Driven Design,简称DDD)是由软件开发专家Eric Evans在其2003年出版的同名书籍中提出的软件开发方法论。DDD强调将业务领域模型作为软件开发的核心,通过与领域专家紧密合作,理解并提炼复杂的...

    领域驱动设计方案.zip

    领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,由Eric Evans在其2003年的著作《领域驱动设计:软件核心复杂性的应对之道》中提出。该方法论强调通过深入理解和建模业务领域的核心概念,来...

    领域驱动设计 软件核心复杂性应对之道

    《领域驱动设计:软件核心复杂性应对之道》是由美国软件设计专家Eric Evans撰写的经典著作,这本书详尽地探讨了如何在复杂的业务环境中利用领域驱动设计(Domain-Driven Design,简称DDD)方法来构建高质量的软件...

    【Qt】Qt产生随机数.rar

    在Qt框架中,生成随机数是一项常见的任务,特别是在游戏开发、模拟系统或数据测试等场景。这个名为"【Qt】Qt产生随机数.rar"的压缩包文件可能包含了一个或者多个示例,演示了如何在Qt应用程序中生成随机数。...

Global site tag (gtag.js) - Google Analytics