软件架构的概念
架构设计就是需求分配,即将满足需求的职责分配到组件上。
软件架构的发展史
汇编语言→程序结构设计→统一建模语言→4+1视图
4+1视图:
- 逻辑视图(Logical View):设计的对象模型
- 进程视图(Process View):捕捉设计的并发和同步特征
- 部署视图(Deployment View):描述了软件到硬件的映射,反映了分布式特性
- 实现视图(Implementation View):描述了在开发环境中软件的静态组织结构
- 用例视图(Use-Case View):该视图是其它视图的冗余(因此“+1”)
软件架构风格
核心问题:能否达到架构级的软件复用?
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。
- 数据流风格:批处理序列、管道-过滤器
- 调用/返回风格:主程序/子程序、面向对象、层次结构
- 独立构件风格:进程通信、事件驱动系统(隐式调用)
- 虚拟机风格:解释器、基于规则的系统
- 仓库风格:数据库系统、超文本系统、黑板系统
具体架构:
- 两层C/S架构
- 三层C/S架构:表示层、功能层、数据层
- 三层B/S架构
- 混合架构风格
- 富互联网应用(RIA):H5、Flex、AJAX
- MVC架构风格:分层架构,主动MVC、被动MVC
- MVP架构风格:MVC的变种,View和Model解耦
- SOA:软件的构件进一步标准化,松散耦合、粗粒度、标准化程度
- 实现方式:Web Service、ESB和服务注册表
- 微服务:小、专注于做一件事,松耦合,独立部署
架构描述语言 ADL
架构描述语言(ADL)是一种计算机语言,用来描述软件或系统架构。
主要组成部分:
- 构件:计算或数据存储单元
- 连接件:用于构件之间交互建模的体系结构构建块及其支配这些交互的规则
- 架构配置:描述体系结构的构件与连接件的连接图
特定领域软件架构 DSSA
基本活动
- 领域分析,建立领域模型
- 领域设计,获得DSSA
- 领域实现,开发和组织可复用信息
分析机制
- 领域专家
- 领域分析人员
- 领域设计人员
- 领域实现人员
三层次模型
- 领域开发环境
- 领域特定的应用开发环境
- 应用执行环境
基于架构的软件开发方法 ABSD
三个基础:
- 功能的分解
- 选择架构风格来实现质量和业务需求
- 软件模板的使用
开发过程
- 架构需求过程
- 架构设计过程
- 架构设计过程
- 架构演化过程
软件质量属性
- 性能
- 可靠性
- 可用性
- 安全性
- 可修改性
软件架构评估
- 风险点:指架构设计中潜在的、存在问题的架构决策所带来的隐患。
- 敏感点:指为了实现某种特定的质量属性,一个或多个构件所具有的特性。
- 权衡点:影响多个质量属性的特性,是多个质量属性的敏感点。
评估方式:
- 基于调查问卷(检查表)的方式
- 基于度量的方式
- 基于场景的方式
- 架构权衡分析法(ATAM) 描述ATAM方法->描述业务动机->描述架构->确定架构方法->生成质量属性效用树->分析架构方法->讨论场景和对场景分级->分析架构方法->描述评估结果
- 软件架构分析法(SAAM)
- 成本效益分析法(CBAM)
软件产品线
双生命周期模型
- 领域工程:领域分析->领域设计->领域实现
- 应用工程:需求分析->系统设计->系统实现
建立方式
| |演化方式|革命方式| |:–:|:–|:–| |基于现有产品|基于现有产品架构设计产品线的架构,经演化现有构件,开发产品线构件|基于现有产品集的需求和可预测的、将来需求的超集| |全新产品线|核心资源随产品新成员的需求而演化|开发满足所有预期产品线成员的需求的核心资源|
组织结构
- 设立独立的核心资源小组
- 对该领域具备长期和深厚的经验
- 一个用于构建产品的好的核心资源库
- 好的产品线架构
- 好的管理(软件资源、人员组织、过程)支持
中间件技术
概念
中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源。
典型应用架构
- J2EE
- .NET