- 内容提要
- 序 1:程序里的世界
- 序 2:最后一层表象
- 关于本书
- 致谢
- 引言:简单的本源
- 篇一:计算系统
- 第 1 章 数,以及对数据的性质的思考
- 第 2 章 逻辑
- 第 3 章 抽象
- 篇二:语言及其面临的系统
- 第 4 章 语言
- 第 5 章 从功能到系统
- 篇三:程序设计的核心思想
- 第 6 章 数据结构:顺序存储
- 第 7 章 数据结构:散列存储
- 第 8 章 执行体与它在执行过程中的环境
- 第 9 章 语法树及其执行过程
- 第 10 章 对象系统:表达、使用与模式
- 篇四:应用开发基础
- 第 11 章 应用开发的背景与成因
- 第 12 章 应用开发技术
- 第 13 章 开发视角下的工程问题
- 第 14 章 应用程序设计语言的复杂性
- 篇五:系统的基础部件
- 第 15 章 分布
- 第 16 章 依赖
- 第 17 章 消息
- 第 18 章 系统
- 篇六:系统的基本组织方法与原理
- 第 19 章 行为的组织及其抽象
- 第 20 章 领域间的组织
- 附一:主要编程范式 及其语言特性关系
- 附二:继承与混合,略谈系统的构建方式
- 附三:像大师们一样思考——从 UML 何时死掉 谈起
- 附四:VCL 已死,RAD 已死
19.2 大型系统已经逐渐走入细分领域的时代
当然,数据量或运算量上的规模依然是系统的一个(外在的、表现上的、实际应用中的)问题。就目前的实践而言,我们事实上也把它们独立为计算机系统开发中的领域,例如分布式计算领域以及分布式存储领域 1 。
分布并不等于并发,这一点我们此前已经讨论过。但分布必然意味着要处理逻辑与数据之间的耦合关系:其一,耦合紧密的逻辑不易拆分,也就不易分布;其二,逻辑与数据紧密耦合,也存有类似的问题。现实中的通用应用开发语言(例如 C、Java 等)是在“算法 + 数据结构 = 程序”这样的结构化理论上发展的,为了增强语言的通用性,其结构化的特性非常明显。这并不利于数据与逻辑的解耦,例如在一个既存的面向对象应用中,想要将对象的数据成员与方法成员解耦并分布,是一件不可想象的事情。但在这个问题上,并不是说具体的语言有多大的问题,而是这个程序设计范式本身的理念与我们讨论的背景并不适配。
在现在的大型通用应用开发语言 2 中,接口的引入是解决上述问题的一个良好实践。但接口带来的是面向行为的设计理念,例如在这样的环境下,我们讨论的问题通常是:某个对象或某个子系统所具有的哪些行为,是可以被抽象为接口的。而实践过程中的这些具体工作,与对象本身的设计以及与面向对象系统的设计是没有多少关系的。也就是说,接口设计与面向对象设计是两回事,只是实践中把两者综合在一起,并试图解决后者的一些实际问题。
这些“实际问题”,具体来说,就是“逻辑如何分布” 3 。
另一方面,现实的软件开发中的“数据”,并不总是和对象一样地通过一个实体(instance)与方法绑定起来。我们面临的这些数据 4 要么是结构化的,例如结构化文本或结构化数据库,要么是非结构化的,例如待索引的文件或者流式数据。这意味着,通用应用开发语言对于处理大数据量几乎毫无帮助。例如在实际工作中,如果这些数据存在于关系型数据库中,我们将使用 SQL 语言来操作;如果它们存在于 NoSQL(非关系型)数据库中,我们就会采用类似于数据流式语言或其他特定的数据处理语言来操作。
所以综合来说,即使仅仅观察“数据+算法”这样的软件开发本质工作,大型系统也被具体分成多个领域了。而软件开发进入领域细分时代的大背景,才是像“云计算”这样的理念得以提出的基础。
换言之,我们一再讨论的分布问题,本身也可以被理解为领域问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论