当前课程知识点:软件理论与工程 > 第3章 软件设计 > 3.4 体系结构概述 > 3.4 体系结构概述
大家好
今天我们来一起学习一下
软件设计章节当中的体系结构设计
体系结构设计
听上去比较抽象
让我们来做一个比喻
如果客户要盖一个房子
他有这样的需求
说我的房子里面要有四个卧室
三个浴室
和大量的玻璃
那么当我们看到这样的需求的时候
可能就会产生一个
框架的概念在你的脑海里
那么这样的框架概念
对于我们软件设计来说
就是我们体系结构设计要解决的问题
那么什么是体系结构设计呢
体系结构设计表示
建立计算机系统所需的
数据结构和程序结构
它需要考虑系统采取的体系结构风格
系统组成的构件的结构和属性
以及系统中所有体系结构构件之间的相互关系
那么简单来说
体系结构设计就是构建软件的初始蓝图
Bass
Clements
and Kazman
对于这个难懂的概念
给出了如下的一个定义
程序
或计算系统的软件体系结构
是指系统的一个或者多个结构
它包括软件构件
构件的外部可见属性
以及它们之间的相互关系
体系结构并非是可运行的软件
确切的说
它是一种表达
这种表达
使得
在满足既定需求方面下
分析设计的有效性
因为我们说体系结构
解决了在软件设计当中的一个
框架性的问题
所以
如果我们的框架设计是否有效
可以在体系结构设计阶段
就可以进行讨论
第二
它解决了在设计变更相对容易的阶段
考虑体系结构可能的选择方案
因为在最开始
我们有了这个框架
那么这个框架还没有添加具体的内容
所以在这个框架的阶段
如果想做一些变更
是相对比较容易的
那么在这个阶段
我们可以考虑
用这个体系结构或者是另外一种体系结构
哪一种更加合理
第三
体系结构可以降低与软件构造相关的风险
我们在建造体系结构的时候
如果我们把结构建造的合理
那么未来出错的可能性就会小
那我们把体系结构建的更加的有效实用
我们后期的软件构造
方法
实现的风险就会低
所以我们的体系结构虽然不是可运行的软件
但是它可以帮助我们分析设计的有效性
可以考虑体系结构可能的选择方案
而且可以帮助我们降低与软件构造相关的风险
那么体系结构为什么这么重要呢
首先
我们在进行软件设计的时候
最开始我们就要先把体系结构设计好
因为它很重要
为什么呢
因为软件体系结构的表示
有助于对计算机系统开发感兴趣的
相关利益方开展交流
和沟通
而且体系结构突出了早期的设计决策
这些决策对随后
所有的软件工程工作都有着深远的影响
就像我们建造一个楼房
我们把框架打好了之后
后期就会有很好的基础
那我们的软件体系结构也是这样
它的正确决策
对随后所有软件工程的工作
都有深远的影响
同时
体系结构对系统
作为一个可运行的实体的最后成功
是有着至关重要的作用
体系结构构建了一个相对小的
容易理解的模型
该模型描述了系统如何构成
以及
其组成的构件是如何一起协同工作的
下面看一下体系结构的类型
类型隐含了整个软件领域的一个
特定的类别
那么体系结构的类型
有点不好理解
我们再看一下关于建筑房屋的例子
我们在体系结构的每种类别当中
都会有很多的子类别
就像我们在建造房屋的时候
我们会有以下几种通用的风格
比如
我们的房屋是住宅房
单元楼
还是公寓
办公楼
工厂的厂房
还是仓库
那么这些不同风格的选择
就决定了
它的结构有着很大的差别
在每一种通用风格中
也会运用更多具体的风格
每种风格都有一个结构
这个结构可以由一组可预测的模式
来进行描述
那么大家可以想象
如果我们要建造房屋建造一个办公楼
和我们见到一个仓库
它的风格一定是不一样的
那么它的结构
和它可用的一些个可预测的模式
也一定是不一样的
那么体系结构有它的复杂性
我们通过考虑体系结构中的构件间的依赖关系
对建议的体系结构的整个复杂性
要进行评估
构件之间的依赖关系有多种
比如它有共享依赖
共享依赖表示
使用相同资源的消费者之间
或者相同的消费者
生产的生产者之间的依赖关系
那么我们还有流依赖
流依赖表示
资源的生产者和消费者之间的依赖关系
也就是前边是资源的生产者
后面是资源的消费者
它们之间有这样子
数据流的依赖关系
那么我们还有一种依赖是
约束依赖
约束依赖表示在一组活动间
相互控制流上的约束关系
那么这些不同的依赖
使得我们的体系结构
有很高的复杂性
我们的体系结构有一种体系结构描述语言
ADL
architectural description language
这种描述语言提供了一种
描述软件体系结构的语义
和相关的语法
体系结构描述语言
可以为设计者提供
分解体系结构构件的能力
还可以提供将单独的构件
组合成大的体系结构块的能力
而且体系结构描述语言
还可以表现构件之间的接口
或者说是构件之间的连接机制
那么这种体系结构描述语言
可以帮助我们描述
这样
结构
和接口等等体系结构要设计的相关的要素
好
这就是我们以上关于体系结构设计
要跟大家一起探讨的内容
谢谢大家
-课程概述
-1.1 软件的本质
-1.2 软件工程
--1.2 软件工程
-1.3 软件过程结构
-1.4 过程模型
--1.4 过程模型
-1.5 敏捷开发方法
-第1章 习题
--第1章 习题
-2.1 需求工程过程
-2.2 需求获取
--2.2 需求获取
-2.3 需求分析
--2.3 需求分析
-2.4 过程建模
--2.4 过程建模
-2.5 面向对象建模
-第2章 习题
--第2章 习题
-3.1 设计概述
--3.1 设计概述
-3.2 设计的概念
-3.3 设计模型元素
-3.4 体系结构概述
-3.5 体系结构风格
-3.6 构件级设计
-3.7 UI设计
--3.7 UI设计
-3.8 基于模式的设计
-第3章 习题
--第3章 习题
-4.1 UML概述
-4.2 UML 及UML中的事物
-4.3 UML关系和图
-4.4 UML 图细节(上)
-4.4 UML 图细节(下)
-第4章 习题
--第4章 习题
-5.1 软件测试策略
-5.2 测试传统的应用系统
-5.3 测试面向对象的应用系统
-5.4 测试web应用系统
-5.5 测试移动应用系统
-第5章 习题
--第5章 习题
-6.1 软件项目估算
-6.2 软件过程管理
-6.3 软件配置管理
-6.4 项目版本控制及调试
-第6章 习题
--第6章 习题