传说中的软件体系结构与设计模式课程中的软件体系结构部分就结束了,好短,6个学时,匆匆掠过,走马观花,根据老师讲的内容写了份笔记,日后慢慢补充…
软件体系结构
概念
- 具有一定形式的结构化元素,即构件的集合
- 处理构件:处理函数
- 数据构件:存储数据 (JavaBean)
- 连接构件
- 软件设计过程中的一个层次
- 为软件系统提供了一个结构行为和属性的高级抽象
代码重用
构件
- 语义完整、语法正确和有重用价值的单位软件,是重用过程中可以明确辨识的系统,结构上是语义的描述、通讯接口和实现代码的复合体
粒度
- 大概就是所容纳的逻辑,逻辑越多为粗粒度,逻辑越少为细粒度,逻辑多少是相对而言的。比方说,对用户暴露了太多细节相对来说就是细粒度的,例如提供Getter和Setter方法,相反,如果提供getData()和setData()方法,就可以认为是粗粒度
”4+1“模型
- 逻辑视图
- 描述系统的功能需求,即系统提供给最终用户的服务
- 开发视图
- 描述软件模块的组织与管理,服务于软件编程人员
- 进程视图
- 侧重系统的运行特性,关注非功能的需求,服务于系统集成人员
- 物理视图
- 描述硬件配置,服务于系统工程人员
- 场景
- 用于刻画构件之间的相互关系
元模型
- 元模型是关于模型的模型
- 四层元模型
- 四层元模型是OMG组织指定的UML的语言体系结构
- 体系结构
- 信息层 information layer
- 由我们希望的数据组成,通常是一些用户数据
- 模型层 model layer
- 由元数据组成,元数据是描述信息层的数据
- 元模型层 metamodel layer
- 是为了描述模型层而定义的一种“抽象语言”,是对模型层的进一步抽象。
- 元元模型层 meta-metamodel layer
- 是为了描述元模型而定义的一种“抽象语言”。元元模型的定义要比元模型更加抽象、简洁。一个元元模型可以定义多个元模型,而每个元模型也可以与多个元元模型相关联。
- 信息层 information layer
经典体系结构风格
- 数据流风格:批处理序列;管道过滤器
- 管道/过滤器
- 在该体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流,这里的构件被称为过滤器,而连接件称为管道
- 优点
- 具有良好的隐蔽性、高内聚、低耦合
- 缺点
- 通常导致进程成为批处理的结构
- 不适合处理交互应用
- 举例:UNIX下的Shell编程
- 管道/过滤器
- 调用/返回风格:主程序/子程序 面向对象风格:层次结构
- 分层系统
- 独立构件风格:进程通讯 事件系统
- 虚拟机风格:解释器,基于规则的系统
- 仓库系统:数据库系统 超文本系统 黑板系统
目前流行的体系结构
- 客户/服务器 Client/Server
- 任务分配
- 服务器
- 数据库安全性的要求
- 数据库访问并发性的控制
- 数据库的备份与恢复
- 客户端
- 用户与数据库交互的界面
- 向数据库提交用户请求,接收来自服务器的信息
- 业务逻辑处理
- 服务器
- 评价
- 优点
- 客户应用程序和服务器构件分别运行在不同的计算机上
- 缺点
- 软件维护和升级困难
- 优点
- 任务分配
- 三层C/S结构
- 结构
- 数据库服务器
- 应用服务器
- 客户端
- 优点
- 应用的各层可以并行开发
- 功能层有效的隔开了数据层和表示层,更安全
- 结构
- 浏览器/服务器模式 Browser/Server
- 即上述三层C/S结构的一种实现,浏览器/Web服务器/服务器
- 优点:系统安装、修改、维护全在服务端解决
- 缺点:缺乏对动态页面的支持,系统扩展能力差,在数据查询等响应速度要远远低于C/S
- 公共对象请求代理结构 Common ObjectRequest Broker Architecture(CORBA)
- 由OMG组织制订的一种标准的面向对象应用程序体系规范。或者说 CORBA体系结构是对象管理组织(OMG)为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案
- 异构结构
- 反射体系结构
- 功能
- 动态获取到类或对象的属性或函数,修改对象的行为
- 把应用程序分成两层:基础层(定义应用程序的逻辑)和元层
- 消息的截取 Open C++
- 反射 Reflect
- 处理从元级转化到基本级
- 具体化 Reify
- 从基本级转化到元级
- 元对象协议 Meta object Protocol
- 功能
软件框架
- 定义:在给定的问题领域范围内建立起可重用解决设计方案问题而相互访问协作的一组类的集合
- 类库与框架区别
- 行为相对于协议
- 类库是行为的结合,而框架除了是行为的集合,而且还是与支配行为的一组规则或协议
- ‘’不是访问我们,而是我们访问你‘’
- 这里出现了一个控制的翻转,框架调用开发者写的程序代码,而开发者的程序是要去调用类库来实现某种功能
- 实现相对于设计
- 类库重用实现,框架重用设计
- 行为相对于协议
- 几个重要概念
- Frozen Spots
- 冷冻部分 框架本身
- Hot Spots
- 热点 可变部分
- Hooks
- 直译过来就是 钩子,即通常理解的回调函数
- Frozen Spots