来自我喜欢的作者 Gordon Brander
有时候你可以通过熟悉的第一原则获得新鲜视角。
麻省理工学院出版社书店算是一个朝圣的地方,
Gordon Brander 最近去了一次发现了 Barbara van Schewick 的新书 《Internet Architecture and Innovation》
《Internet Architecture and Innovation》的要点
- 互联网之所以如此具有创造性,有一些特定的原因,这些原因可以映射回到互联网历史早期的建筑选择。
- 如果你想建立新的类似网络的东西,这是一本重要的书。
- 在开篇章节专门介绍了,互联网的一个关键架构原则是模块化。
- 什么是模块化?它是怎么工作的?为什么它这么重要?
- 模块化对软件行业来说是一个非常熟悉的概念,它可能对大众看起来很平庸。
- 但这本书一直促使人放慢脚步,反思模块化,并试图以初学者的思维重新审视它。
下面是 Gordon Brander 一些有意思的反思
什么是模块化?
- 模块化是一种有意使组件高度独立(“松散耦合”)的设计原则。
- 当一个系统由具有可识别边界的较小的独立部分组成时,它就是模块化的。
- 在设计模块化体系结构时,系统架构师以最小化组件之间依赖关系的方式分解系统。
- 模块化系统可以由组件进行分解和重组。
如何判断系统是否模块化?
- 关键的测试是,是否可以添加、删除、修改或交换组件而不改变其他组件。
- 如果一个产品在设计上是模块化的,它的组件可以独立设计。
- 如果它是模块化生产,其组成部分可以独立生产。
- 如果在使用中是模块化的,产品的用户可以在以后的阶段更换或“混合和匹配”组件。
模块化是和接口有关的
- 模块化系统是由独立的部分组成的。
- 但是如果我们要把这些部分组成一个系统,就需要某种方式来交谈。
- 为了使组件独立,并保持它们的独立性,模块化使用了抽象、隐藏信息和严格的焦点分离。
- 为了保持独立性,必须仔细指定模块之间的通信方式。
- 如果他们不这样做,每个部分将不得不决定它应该呈现的连接器的类型自己的思考。
- 很多碎片不会合在一起。
- 那些需要的人必须知道其他组件的形状,并且围绕这些特定的组件设计他们的连接器。这
- 接口有很多名称: API、协议、功能函数、契约、规则、乐高 dots 等。
- 无论如何,接口的设计对于模块化系统的成败至关重要。
- 模块化接口是定义系统字母表表达潜力的语法。
模块可以快速演化的
- 只影响一个模块的信息即黑匣子内部的信息除了设计者之外对所有人都是隐藏的它被称为架构的隐藏信息。
- 这些信息在体系结构的设计过程中没有指定,而是在详细设计阶段确定的;
- 它可以在体系结构的可见信息提供的框架中自由发展,直到详细设计结束。
- 因为模块是黑盒子,所以您可以更改模块中的任何内容,只要它不更改接口。
- 模块使您能够在不破坏任何功能的情况下快速改进系统的内部结构。
但是接口必须缓慢发展
- 模块间的接口不能快速演化,否则系统会崩溃。
- 模块化并非没有代价。体系结构的可见信息在详细设计期间不允许更改,以后也很难更改。
- 协议的运行速度比平台慢得多。30多年过去了,电子邮件仍然是未加密的;
- 这给我们提出了一个难题: 在正确的地方划定模块化的边界是至关重要的。
- 模块化的边界决定了系统的哪些部分可以快速演化,哪些部分将被冻结在时间中。
- 接口的成本也是“将所有东西模块化”。模块化本身扩散了接口,限制了快速发展系统的能力。适应性。
模块允许我们隔离系统的某些部分,以便它们能够快速演化,但它们也是系统自身演化的机制。
早在 DNA 被发现之前,人们就知道生物演化背后的遗传机制必须是数字的、可计数的、模块化的。
为什么?
因为演化发生在任何具有变异、遗传和选择的系统中,除非可以增加和删除部分,否则就不可能发生变异。
因此,模块化是演化系统的一个关键属性。
- Mutation ← Changing or replacing modules
- Heredity ← Composing new modules from old
- Selection ← Usefulness
科技在进步。
新技术由旧模块递归组合而成,然后依次成为模块。
模块就是发明的 DNA。
推荐:
