这是我阅读《从零开始学架构》(作者李运华)所做的读书笔记。
我想以这种慢的方式,去追求理解这本书,学好这本书。
立个FLAG:死磕自己,读完全书,笔记跟进。
一、什么是架构
在搞清楚什么是架构之前,要注意先区分几个概念:系统、子系统、模块、组件、框架和架构。
系统:指由一些存在关联性的个体组成,并根据某种规则运作,同时能完成个体元件不能单独完成的工作的群体。
子系统:是相较于系统来说的,多半是更大系统中的一部分。
模块与组件:模块和组件都是系统的组成部分,只是从不同角度拆分系统而已。模块是从逻辑角度对系统拆分之后的单元,组件是从物理角度对系统拆分之后的单元。拆分模块的目的是职责分离,而划分组件的目的是单元复用。
框架:框架可以是组件规范,也可以是提供基础功能的产品。比如,MVC是一种常见的开发规范,而Spring MVC是MVC的开发框架,除了满足MVC的规范,同样提供了很多基础的功能。
架构:软件架构是指软件系统的基础结构。相较于框架,架构关注的是结构,而框架关注的是规范。而结构并没有一个明确的概念,因为可以从很多角度来划分,比如业务逻辑角度、物理部署角度,还可以是开发规范角度,也是因为这个原因,软件架构视图可以分为多个视图。
架构含义重新定义:
软件架构就是指软件系统的顶层结构。这里的系统就是由一群存在关联的个体组成,而这些个体可以是子系统、模块、组件等;架构需要明确系统中包括哪些个体,这些个体是如何运作和协作的。
二、为什么要进行做架构设计
从结构化程序设计到面向对象
结构化程序设计本质上是一种面向过程的设计思想,其虽然能解决复杂的软件逻辑问题,但对于业务变化带来的软件扩展却无能为力,在这种背景下,面向对象开始流行起来。
从模块到架构
结构化编程创造了“模块”的概念,而面向对象编程创造了“对象”的概念,之后流行软件架构时,又创建了“组件”的概念。可以看出来模块、对象、组件都是对一定规模软件的拆分,只是虽然这软件复杂度的增加,拆分的颗粒度越来越粗而已。
回顾初心,找准方向
通过回顾初心,可以看出来软件架构其实是为了应对软件系统的复杂度而提出来的一个解决方案,所以,进行架构设计的主要目的就是为了解决软件复杂性带来的问题。这是初心,更是架构设计的准则。