当前课程知识点:面向对象分析与设计 > 架构分析 > 定义模型的高层组织结构 > 定义模型的高层组织结构
同学们 下面我们讲第11讲
架构分析设计2
在架构分析设计2里面
我们讲一下架构的高层组织
首先 我们介绍两个基本概念 架构模式和框架
什么是模式?
我们说模式提供了一种公共问题的一种公共的解决方案
而分析设计模式提供了一些狭小的具体的技术问题给出的一个参考的片段性的解决方案
我们知道在Java的分析设计模式有23种
比如说单例模式 工厂模式等等
感兴趣的同学可以下来查阅相关资料学习
但是每一种分析设计模式只和技术问题相关
和应用领域无关
也就是说 分析设计模式具有一定的通用性
它可以在多个领域里面只要是类似的相同的问题
都可以采用同一个设计模式
那么框架和模式不同
模式只是给出了一种设计方法或者说一种参考的解决方案
而框架给出的是一个针对特定问题的 或者说普遍的解决方法
所以在框架里面提供了一种骨架解决方案
框架里面已经给出了针对这个问题的一个相对比较完整的一个解决方案
同时它预留了接口
通过对接口的定制开发
可以使得框架能够满足所开发的系统需求
这里来进一步来讲一下设计模式
我们说设计模式是针对公共的设计问题
也就是说它与用户的业务领域是无关的
它只是针对设计问题给出的设计模式
它针对设计问题给出了解决方案
它描述了针对这种问题在这个解决方案里面需要有哪一些元素 哪一些类 或者哪一些对象
以及这些类和对象它怎么样相互协作
通过时序图 通信图来描述它们相互协作来解决这个问题
最后 它还会给出针对这种设计模式
在系统应用这种设计模式的优点和不足
来帮助你选择和应用所需要的设计模式
所以设计模式我们可以看作对设计经验的总结
对于常见的 具有一定难度的公共的设计问题
一些好的设计师通过他的经验总结以后
给出的好的参考的解决方案
架构模式可以看成在软件架构设计问题中
给出的一个好的解决方案
所以架构模式描述了在软件架构设计过程中 软件系统一种基本的内部组织结构
它定义了
如果参考这样一个架构模式你需要预先定义哪些组件和子系统
每个组件和子系统的职责是什么
它们之间的接口是什么
关系是什么
以及如何来把这些组件和子系统组织在一起
我们把它称作架构模式
前面介绍的设计模式只是我们针对详细设计问题给出的解决方案
那么架构模式就是针对软件体系架构设计给出的一些好的参考的解决方案
这里列出了常用的四个架构模式
比如说第一个层次化架构模式
层次化架构模式后面我们要重点介绍
比如在网络的七层协议架构中就选用了这种层次化架构模式
还多数的应用软件也都采用了层次化体系架构
第二个常见的叫
MVC(model view control )
模型视图控制器模式
模型视图控制器模式它把整个体系架构分为三个部分
模型部分 视图部分和控制器部分
其中模型部分用来存储和管理系统中的数据
视图部分用来对数据进行展示
和用户进行交互
而控制器部分完成业务逻辑的处理和计算
也就是说
MVC模式情况下它把数据
数据的展示 数据的计算
把它拆分成三个部分
使它们相互独立
这样提高了整个系统的可维护性
第三个比较常见的叫管道与过滤器
在管道里面
它主要负责把一个输入数据转换成合适的格式再输出出去
而在过滤器里面
则负责对数据的加工处理和计算
这样的话
管道过滤器模式下
整个系统架构里面可以有多个过滤器
每两个过滤器之间通过一个管道进行连接
这种体系架构的好处是
如果根据需要
需要增加对数据的处理加工
我只需要增加新的过滤器
然后重新定义过滤器之间的管道连接
就可以使系统很快的
扩展它的功能
管道过滤器适合那种
对数据进行顺序批量
流量化处理计算的软件系统
第四种比较常见的称之为黑板模式
黑板模式主要用在一些协同设计的软件里面去
在黑板模式下
我们把公共的数据存储在一个全局的数据库 或者全局的数据存储结构
每一个应用都可以对数据进行访问
进行读写
任何一个客户端对数据进行读写
在其他客户端上立即得到显示
这样黑板模式适合协同设计
这样一些软件适合采用黑板模式
我们下面重点介绍层次化体系架构模式
层次化体系架构模式应用非常广泛
最成功的应用在网络拓扑结构里面
包括TCP/IP协议栈
都采用层次化体系架构
在网络拓扑结构里面
它把它划分为七层
这样的话上下之间定义了标准接口
当底层升级替换以后不会影响到上层的软件
这也就是为什么我们在网络里面
我们写的应用程序通过TCP UDP进行通信
但是底层可能采用光纤 双绞线或者无线
这样的物理层介质
或者物理层链路层替换掉以后
不会影响到应用层程序的原因
在一般的应用软件里面
我们在层次化体系架构里面把它主要划分成四层
最底层称之为系统层
中间件层
领域层
和应用层
系统层里面主要定义一些跟硬件跟软件运行环境相关的
比如像操作系统 驱动等等
就放在系统层
系统层提供整个软件运行的基础环境支撑
那么中间件层则提供和应用领域无关的
一些公共的基本的服务组件
比如说
在应用软件里面我们经常访问数据库
那我们进行数据库访问
像JDBC 这样一些组件就属于中间件层
其他的比如说
加密解密的
压缩解压缩的
这样一些组件也都属于中间件层
中间件层软件的最大的特点就是和应用领域没有关系
比如说
像刚才介绍的数据库访问 压缩 加密等等
在教育系统软件里面可能会用到
医疗信息管理系统软件里面也可能会用到
在电子政务系统里面同样可能会用到
在往上 我们称之为领域层
领域层则定义和具体应用没有关系
但是它描述了行业领域里面
一些公共的基础的服务
比如说
我们开发的大学教务系统
每一所大学它的教学组织管理模式可能不一样
所以它的软件功能可能不一样
但是所有大学里面
无论是西北工业大学
西北大学
北京大学
它都有一些公共的基础的
比如说
所有教学系统里面都有教师的管理
学生 课程 考试等等
这些构成它的领域模型
或者领域层组件
在往上就是应用层组件
应用层组件描述
当前我们所开发的软件系统
独有的特定的
一些软件功能组件
就把它实现在应用层
还是以我们刚才举的例子
我们西工大的
北大的
清华的
教学模式就不一样
所以它的应用层里面
都是学生管理
它管理的程序功能软件组件就有区别
这样一些组件把它放在应用层
这边给出的就是我们前面给出的例子
就是网络拓扑七层协议
那么我们如何来分层
那么在分层的时候
我们在同一个层次上
它应该有相同的抽象级别
我们在系统层
所有的系统层都是和硬件相关的
和运行环境相关的
它就应该放在系统层
反过来和具体应用功能相关的
就应该放在应用层
同一层里面的元素子系统组件
应该具有相同的抽象级别
另外在分层的时候我们要考虑
将相似的事情放在同一个层次
反过来说
将不相似的不同的放在不同层里面
在这里
我们要强调
对于和业务领域无关的
我们要把它放在中间件层
但是领域里面公共的
把它放在领域层
领域里面每个应用独有的特殊的
就应该把它放在应用层
在层的划分中
通过采用层次化体系结构
它的优点第一个就是松耦合
在层和层之间
只是上一层依赖下一层
下层不能访问和调用上一层
下层不能依赖上层
这样当上层修改以后
下层程序也不会受到影响
反过来说
层次化体系结构里面
明确定义每一层对上提供的服务接口
在接口标准化以后
当下层接口不变
下层的变更也不会扩散影响到上层
这样就可以实现上下层之间的松耦合
同时实现层次间的相对封装
层内的变化不会影响扩散到层外去
在层次化体系结构里面
我们对变更的封装主要包含在两部分
第一部分容易变化的就是系统运行环境
比如说系统硬件变了
操作系统升级了
有了系统层以后
我们只需要变更系统层的驱动
变更系统层的操作系统
就可以了
对上层的应用软件就不需要做任何的修改
第二个在软件运行过程中
软件生命周期里面
容易变更的就是具体的
用户的接口
界面接口
用户的界面
业务逻辑等等
这些界面 业务逻辑
我们把它们封装在最上面的应用层
那么当它们变化以后
我们只需要修改应用层的软件组件就可以了
它也不会影响到下层的领域层中间件层
在面向对象里面
并没有一个标准的元素来描述层
这里我们以包进行扩展来定义层
我们使用面向对象
UML提供的一种扩展机制
称之为构造型
通过包
定义构造型以后
扩展定义一个UML元素
我们把它称之为层
构造型是在UML里面提供的
它可以在已有的模型元素基础之上
来定义一种新的特定的模型元素
我们说标准的UML里面
对系统设计这块支持是不够的
所以我需要在UML里面包的基础之上
我们来通过构造型这种机制
扩展定义一种新的模型元素
当然我们不仅可以在包的基础上扩展定义
也可以在其他的
比如说 类
其他的模型元素
也都可以根据需要来扩展定义我们所需要的新的模型元素
在定义完层之后
我们就可以把层次化体系架构设计成
上面是应用层 它依赖于领域层
今天我们介绍了架构分析里面
主要的架构分析模式
架构模式以及框架
最后我们介绍了层次化
最后我们介绍了层次化
这种分层的架构模式
和分层的主要考虑因素
谢谢大家
-软件开发过程中的主要问题和好的解决方法
--软件开发过程中的主要问题和好的解决方法
-RUP软件开发模型的特点
--RUP软件开发模型的特点
-四个基本原则
--四个基本原则
--四个基本原则
-对象和类
--对象和类
--对象和类
-类之间的关系
--类之间的关系
--类之间的关系
-用例模型
--用例模型
--用例模型
-用例之间的关系
--用例之间的关系
--用例之间的关系
-用例建模
--用例建模
--用例建模
-分析与设计概述
--分析与设计概述
--分析与设计概述
-架构分析基本概念
--架构分析基本概念
--架构分析基本概念
-定义模型的高层组织结构
--定义模型的高层组织结构
-确定分析机制、确定关键概念、创建用例实现
--确定分析机制、确定关键概念、创建用例实现
-用例分析概述
--用例分析概述
--用例分析概述作业
-控制类
--控制类
--控制类
-用例行为和类的关系
--用例行为与类的关系
-识别设计元素概述
--识别设计元素概述
--识别设计元素概述
-识别子系统及接口
--识别子系统和接口
--识别子系统及接口
-描述运行态软件体系架构
--描述运行态软件体系架构
-描述分布式系统架构概述
--描述分布式系统架构概述
-用例设计描述
--用例设计描述
--用例设计描述
-子系统设计概述
--子系统设计概述
--子系统设计概述
-创建初始设计类、定义类操作方法
--创建初始设计类、定义类操作方法
-定义类状态
--定义类状态
--定义类状态
-定义类之间的依赖关系、关联关系以及多重性设计
--定义类之间的依赖关系、关联关系以及多重性设计
-定义类的泛化关系、解决用例冲突、非功能性需求
--定义类的泛化关系、解决用例冲突、非功能性需求