什么是架构?
架构(或者称为体系结构)具有非常多的定义:
比如IEEE将架构定义为:
一个系统的基础组织,其中包含了构件,构件之间以及构件与换件的关系,以及指导它们设计和演化的原则。
为了理解架构和模块化,我们需要回答以下问题:
- 什么会让一个决策在架构上具有重要意义?
- 组装的元素是什么?
- 我们如何适应架构的演化?
架构师和程序员之间通常有一道鸿沟。架构师主要关注应用和服务,程序员主要关注代码。架构师关注广度,程序员关注深度。
架构有其社会化的一方面(social apsect),架构可以认为是一种共识(shared understanding),基于共识,我们才能划分为架构师和开发者,并且进行有效的沟通。为了确保共识,我们需要从上至下(all the way down)的进行设计。也就是说,架构师不能仅仅关注于服务,开发者不能仅仅关注于代码。在服务和代码之间有大量的中间地带需要被关注。这这块中间地带则是包结构和模块的设计。
架构与模块化的关系
架构的目的是最小化变化带来的影响和开销,模块化通过填补高层架构和底层代码之间的缺口来帮助我们实现这个目的。 Fowler曾提过“摆脱体系结构”,通过灵活性来最小化变化的开销和影响,以消除架构。但是灵活性意味着更大的复杂性,如何摆脱呢?
问题的回答
什么会让一个决策在架构上具有重要意义的?
如果变化的开销和影响非常大
组装的原色是什么?
类,模块,服务
我们如何适应架构的演化?
通过设计可以适应变化的灵活方案,但是灵活性同时带来复杂性,我们应该在系统适当的地方构建灵活性。