本系列是极客时间《从0开始学架构》的读书笔记。
一、什么是架构
对应《01|架构到底是指什么?》
作者首先梳理了系统和子系统、模块和组件、架构和框架这些概念的区别和联系。评论区有位说得很明白:
架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。
按照我的理解,架构的维度是最大的,一般我们会讲业务架构和技术架构两类。而框架重在提供一种约束,是半成品,实际的开发人员在框架内的约束下编写业务代码,而框架通过控制反转(IoC)运行程序。组件和模块并没有什么区别。
二、历史背景
对应《02|架构设计的历史背景》
在本篇中,作者简单介绍了下软件工程的发展历程。从机器语言,到汇编语言,到高级语言。从第一次软件危机背景下出现的结构化程序设计,到第二次软件危机背景下出现的面向对象设计。
其实如果读的多的话,会发现在计算机的很多领域都会或多或少复述一遍上面的历史进程。比如说各类编程范式,命令式、过程式、面向对象、函数式、逻辑式、并行式……比如说数据与计算量,从大型机到云计算,从单一到分布式……
我们会发现,解决的问题越来越多,越来越大,但是相随的是,出现的问题也越来越多,越来越复杂了。软件工程是为了解决问题而不断创新的,现在人们发现软件架构的优劣也是一个重要的影响因素。
但是呢,架构设计同之前出现过的结构化设计和面向对象设计一样,并不是一劳永逸的。软件工程领域没有“银弹”。
面对出现的未知问题,不断创新,将问题拆分,将复杂度降低,这才是软件工程领域永远不变的主题。
三、目的
对应《03 | 架构设计的目的》
从上篇可知,架构设计同之前出现过的其他设计理念相同,都是为了解决新出现的问题而提出的。那为什么会新出现问题?在于复杂度。所以,架构设计是解决由于复杂度带来的问题的方法之一。
基于复杂度来思考也是架构设计领域的指导思想。比如说哪个部分需要设计架构?架构设计主要偏向于哪方面,是高可用,高性能,还是可扩展?需不需要引入某技术?
作者在之前也提到过,同编写程序不同,架构设计更趋向于“取舍”,那如何去取舍的重要依据也是“复杂度”。