- 浏览: 112487 次
- 来自: ...
文章分类
最新评论
Bounded Context
人们总是试图建立一个统一的模型, 某种一致的描述. 物理定律表现出来的一致性震撼人心, 是相对成功的例子. 绝大多数人都相信自然界存在一个终极的理论来描述宇宙的本质. 物理学的历史也就是不断趋近这个终极理论的历史, 不断有各种彼此独立彼此矛盾的理论被新的更一致的理论所统一. 比如目前前沿物理学家正在致力于统一自然界的四种力: 强力, 弱力, 电磁力, 引力. 目前已经有理论可以统一前三种, 只剩引力游离在外.
受此启发, 很多开发者也相信在某个企业的业务领域中, 存在一种统一的模型. 一旦我们找到这个模型, 代码会变的简单一致, 容易理解.
听上去合情合理. 让我们再深入观察一下这一点.
宇宙的终极定理尚未发现, 而牛顿定律, 麦克斯韦电磁方程都已经被发现在更微观领域的局限性. 如果LHC对撞出的中微子真的证实比光速快, 则相对论的前提不复存在, 因而其结论也会备受怀疑. 也就是说, 它们都不是最终的模型. 但这并不妨碍我们依此发展出现在的科技, 依此来发明创造新的工具来解决生活中各种问题. 也就是说即使我们依据一个并不完善的理论也可以工作的很好. 这里的关键, 是理论的有效范围. 一个经典例子是GPS. 如果根据经典理论来设计GPS, 会有较大的误差, 考虑相对论效应, 则可以使误差降低到可以接受的范围内.
而在软件开发领域发生的事情也暗合同样的轨迹. 看过报道说几年前曾经有一股潮流(或者是个例), 就是有的企业试图为自己的应用建立全企业范围的统一模型, 结果就像物理定律的统一过程一样, 历尽艰辛但几乎永远无法到达目标. 相反的是, 针对某个具体的子领域建立自己的局部模型, 而在领域间交流时通过模型的互相映射的尝试却较为成功, 较为实际的解决了问题.
这就是实用主义的Bounded Context.
Model-Dependent Realism
人们总是试图建立一个本质的模型, 某种客观的描述. 物理定律表现出来的客观性震撼人心, 教会都已经为哥白尼和伽利略平反了. 绝大多数人都相信自然界存在一个客观的理论来描述宇宙的本质. 这被称为决定论者. 比如目前决定论物理学家正在致力于调和相对论和量子力学不可调和的矛盾, 因为他们实在不喜欢量子力学的不确定性.
开发者也不喜欢不确定性. 他们相信在具体的业务领域中, 存在一种本质的模型. 一旦我们找到这个模型, 代码会变的简单一致, 容易理解.
听上去合情合理, 毕竟软件建模的是宏观世界, 远离不确定的微观世界. 让我们再深入了解一下更大范围内物理学家的想法
霍金在最近出版的<<大设计>>中提出了依赖模型的实在论: "实在性的幼稚观点和现代物理不相容。为了对付这样的自相矛盾,我们将采用一种称之为依赖模型的实在论的方法。它是基于这样的观念,即我们的头脑以构造一个世界模型来解释来自感官的输入。当这样的模型成功地解释事件,我们就倾向于将实在性或绝对真理的品格赋与它,并且组成它的元素和概念。但是在为同样的物理场景作模型时,也许存在不同的方法,每种方法使用不同的基本元素和概念。如果两个这样的物理理论或模型都精确的预言同样的事件,人们就不能讲一个模型比另一个更真实;说的更精确点,哪个模型更方便我们就随意地使用哪个"
有这样想法的物理学家不在少数. 从实用性的角度来讲, 它工作的很好. 它同时也符合我们更熟悉的另外一种表述: 模型本身没有优劣, 除非把它们置于同一个问题上下文中. 换句话说, 模型由手头的问题决定, 而不是某种本质客观的东西.
举个例子: 如何建模电影院里的椅子?对号入座的话就是Entity, 不对号的话就是Value Object
任何一个 Domain 都有 Model; 但Model并不是某种本质的东西, 而是完全由需求或者使用方式来决定, 也就是Model是由对系统的使用方式决定的
这与依赖倒置原则也是契合的: 接口不应该由低层模块来决定, 而应该由问题域定义的抽象来决定. 实际上, 接口定义就是Model的体现形式
发表评论
-
Architecture is layered
2004-12-11 11:57 348那天被问道软件架构师需要了解编程语言的细节吗? 呵呵,架构是 ... -
Thinking Everyday
2004-12-11 12:01 3981,编程语言的发展趋势 ... -
糟糕命名集锦
2004-12-11 16:50 5471,公交支线,如375和375 ... -
古代的软件开发 (一)
2005-02-19 16:45 6511,额外的中间层鞋子:人类发明鞋子的意义无论如何评价都不过分, ... -
访问控制 : 语言和平台
2005-03-15 19:27 584程序逻辑上的组织方式(如名称空间,包等)可以和部署时的分发 ... -
Thinking Everyday II
2005-03-17 15:11 5961, 是业务,不是技术,傻瓜 是集成,不是编程 是使用,不 ... -
内容与标准为王:下一代互联网与下一代搜索
2005-07-25 14:53 624第一代互联网混淆了真正的数据和它的表现形式,第一代搜索无法 ... -
个性与定制为王:下一代互联网和下一代门户
2005-07-28 11:28 552看一下现在我与互联网有关的生活:我有两三个常用的Web邮箱 ... -
泛型编程 vs. 面向对象
2005-08-10 14:30 767面向对象:封装(数据抽象)是基础,继承是手段,多态是目的 ... -
函数式编程 vs. 对象式编程
2005-08-10 14:44 618<<我爱我家>>有一集和平摔成了脑 ... -
用手机从ATM取钱
2005-11-21 22:49 671手机的以下两个特性,使它潜在的可能成为统一的支付和信用平 ... -
Web 3.0 : Unified Human-like Interaction
2006-01-14 16:31 669你还在到搜索引擎的主页上去搜索吗?你还登录新闻网站查询最新比赛 ... -
软件生物学
2006-01-14 16:59 619长久以来,软件的建筑学隐喻已经深入人心,可始终无法达到建筑 ... -
广义对象论
2006-01-25 15:31 653前几天本想接着以前的思维中对“3.2 Programming ... -
Thinking Everyday III
2006-03-26 14:17 7541, RAII让我告别了delete,IoC让我告别了ne ... -
简单至及的AOP和IOC
2006-03-26 14:21 616I. AOP的例子 1, Google To ... -
TDD: Tricky Driven Development
2007-05-10 07:07 560命名 测试用例的名字应该描述需求, 不要描述实现. ... -
Thinking Everyday IV
2007-05-15 04:36 4931, 实际上 C# 2.0 已经部 ... -
迭代本质论
2008-02-14 13:58 591新年伊始, 可能你又要制定一些计划了, 实际上, 你的生活在开 ... -
建筑的永恒之道
2004-08-10 18:31 6172,质 这种特质是任 ...
相关推荐
领域驱动设计(DDD)的中心内容是如何将业务领域概念映射到软件工件中。大部分关于此主题的著作和文章都以Eric Evans的书《领域驱动设计》为基础,主要从概念和设计的角度探讨领域建模和设计情况。这些著作讨论实体...
领域驱动设计源码 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 ...
Brief announcement: Bounded-degree cut is fixed-parameter tractable
本书是Eric Evans对他自己写的《领域驱动设计-软件核心复杂性应对之道》的一本字典式的参考书,可用于快速查找《领域驱动设计》中的诸多概念及其简明解释。书是英文版的,2015年3月修订版,我已经加了目录,方便大家...
Sarunas-Girdenas-Bounded_Memory-archive-refs-heads-master.zip
Approximated Distributed Minimum Vertex Cover Algorithms for Bounded Degree Graphs.- Graph Theory and Algorithms.- Maximum Upward Planar Subgraph of a Single-Source Embedded Digraph.- Triangle-Free 2...
Delay-range-dependent Robust Stability Criteria for Uncertain Neutral-type Lur'e Systems with Sector-bounded Nonlinearities
领域驱动设计(DDD)的中心内容是如何将业务领域概念映射到软件工件中。大部分关于此主题的著作和文章都以Eric Evans的书《领域驱动设计》为基础,主要从概念和设计的角度探讨领域建模和设计情况。这些著作讨论实体...
有界上下文画布是用于设计和记录单个有界上下文的设计的协作工具。 有是软件体系结构中与您的域的一部分对齐的子系统。 画布通过要求您考虑并选择其设计的关键元素(从命名到职责到其公共界面和依存关系)来指导您...
this code generates input file of QC code for poly grain crystals
遵循域驱动设计(DDD)和命令查询责任隔离(CQRS)原则的Java应用程序的实现示例,以使代码尽可能简单。 看看,玩,玩得开心! :rocket: 环境设定 安装Java: brew cask install java 克隆此存储库: git clone ...
ANSI-C_Bounded_Model_Checker
Adaptive Fuzzy Control for Pure-Feedback Nonlinear Systems with Non-Affine Functions being Semi-Bounded and In-differentiable
当人们面临选择回报的不确定性时,他们在动态随机环境中如何选择? 越来越多的文献研究了有限理性模型在此类环境中的有效性。 在这项研究中,我们通过提出一种名为 Myopic-VPI 的新启发式决策过程来为该文献做出贡献...
JdonFramework,您可以构建具有异步并发性和更高吞吐量的领域驱动设计 + CQRS + EventSourcing 应用程序。 Jdonframework 帮你实现一个干净的六边形架构! 为什么是DDD? 领域驱动设计 (DDD) 是一种为复杂需求开发...
书中关于Ubiquitous Language,Bounded Context,Domain Event,以及基于DDD的战略设计和战术设计有非常精辟的阐述
ChannelContext:允许创建和删除频道 ChannelAuthorizationContext:允许维护写入Channel的授权 IdentityAndAccessContext:允许对用户进行身份验证 UserContext:允许用户更改基本配置文件信息 从整体解决方案开始...
C Bounded Model Checker
Item 31: Use bounded wildcards to increase API flexibility Item 32: Combine generics and varargs judiciously Item 33: Consider typesafe heterogeneous containers 6 Enums and Annotations Item 34: Use ...
this is designed to operate on bounded grids( clj-tiny-astar/a* [ 4 4 ] ; ;bounds of the grid (width & height) my-predicate ; ;predicate that takes a point [x y] and returns whether a cell is ...