定义
软件架构是指:对于软件的各个方面做出的设计决定,包括行为上的和结构上的。
结构上:
表示产品如何划分多个部分,以及这些部分之间的关系。
行为上:
包括外部行为和内部行为。
外部行为描述了产品如何与用户、其他系统、外部设备进行交互。
内部行为描述了产品组件之间的交互接口。
注意:
架构可作为一个名词也可作为一个动词。
作为名词,表示一组抽象、规则,即产品的结构约束,像蓝图或构建规范的文档等,它描述了要构建的对象;
作为动词,表示制作这些抽象、规则的过程;
架构与设计的关系
架构是设计的一部分,通过抽象突出了一些细节,而忽略了另一些细节。
突出的细节:如结构、行为规则、组件如何装配、应用规则等;
忽略的细节:组件如何具体设计、开发等;
架构主要的关注点
功能性
软件向用户提供哪些功能?
可变性
软件将来可能需要哪些改变?哪些可能不需要改变?
性能
软件期望将来达到怎样的性能?
容量
多少用户使用?需要为多少用户保存数据?
可构建性
如何构建成一组组件?能够独立的实现、验证、复用等
模块化
如何将软件任务分解成独立的模块?支持独立开发等
安全性
数据安全如何保证?权限控制?抵挡攻击?等
生态系统
与其他系统、设备如何交互?
好的架构
对于一个软件进行架构,架构师通常的做法是折中。
他们除了考虑基本的功能需求和品质需求外,还需要考虑投入的成本(人力、财力、时间等等)。
所以架构设计是否最优,没有一个绝对的答案或正确答案。
从我们的经验来说,应该对架构进行评估,确定它是否满足我们的需求。
可以通过对架构师提出质询来评估架构,寻找架构不能满足品质关注点的风险,架构师解释如何支持各个场景。
也可以确定架构的属性,通过建模或模拟系统的一个或多个方面,判断架构是否满足。
类库、框架、设计模式、架构概念区别
在一些常规项目的开发过程中,多少都会提到上面几个词汇,
那么,他们之间具体的区别是什么呢?
类库
也可称为工具库,是为解决某一问题而进行的封装。
作用:使开发者摆脱底层编码(不必重复制造轮子),专注特定问题和业务逻辑,给程序员带来了方便。
框架
相对工具库更宏观,是一组协同工作的类,在某种程度上控制整体的结构和流程,是服务于业务的。
作用:使设计者在特定领域重用整体设计(不必重复制造轮子),也是为程序员带来编码约束的。
设计模式
是针对一类问题提出的行之有效的解决方案。
作用:对开发者而言,是思想上(问题解决方案)的重用,但只是针对局部。
架构
是一个软件的最高层次的整体结构和规划。
相对设计模式而言,是针对软件整体的“解决方案”。
一个架构可能包含多个(0 ~ n)框架和多个(0 ~ n)工具库,
一个框架可能包含多个(0 ~ n)设计模式。
1. 一个架构可能包含多个(0 ~ n)框架和多个(0 ~ n)工具库
例如:
一个java web项目,可包含spring/springmvc + hibernate/mybatis + ......等多个框架;
工具库就更多了,如:JSON库、XML库、日期库、图片库等;
2. 一个框架可能包含多个(0 ~ n)设计模式。
普通开发中,常见的框架模式有很多种,如MVC/MVVM/MVP/MTV/CBD等。
以MVC为例,通常,MVC可看做3个设计模式:即观察者模式、策略模式和组合模式的合体。
-- 框架是大智慧,用来对软件设计进行分工;
-- 设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,减低耦合度。
参考:
《架构之美》
《企业架构应用》
......
本文参考了多份资料,比较概念化,如有问题的地方,请及时指正。