大师兄的信息化管理学习笔记(十一):软件架构与设计模式
2023-02-09 本文已影响0人
superkmi
大师兄的信息化管理学习笔记(十):面向对象方法
大师兄的信息化管理学习笔记(十二):软件工程过程管理
一、关于软件架构设计
- 软件架构为软件提供了一个结构,行为和属性的高级抽象。
- 软件架构属于一种系统草图,确定软件系统划分成哪些模块,明确各模块之间的相互作用,组合起来就是系统的架构。
- 软件架构的目的是为了解决好软件的复用、质量和维护问题。
- 软件架构研究的主要内容如下:
- 软件架构的描述
- 软件架构的风格
- 软件架构的评估
- 软件架构的形式化方法
二、 软件架构风格
- 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。
- 软件架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
- 软件架构风格包括:
风格 | 描述 |
---|---|
数据流风格 | 批处理序列、管道/过滤器 |
调用/返回风格 | 主程序/子程序、数据抽象、面向对象、层次结构 |
独立构件风格 | 进程通信、事件驱动的系统 |
虚拟机风格 | 解释器、基于规则的系统 |
仓库风格 | 数据库系统、黑板系统、超文本系统 |
1. 管道/过滤器模式
- 每个构件都有一组输入/输出,构件读取输入的数据流,经过内部处理后,产生输出数据流,该过程主要完成输入流的变换及增量计算,通常这些构件称为过滤器。
- 模式优点:
- 高内聚、低耦合
- 支持服用
- 便于维护
- 支持并行
- 模式缺点:
- 需要协调
- 性能下降
- 实现复杂
2. 面向对象模式
-
典型应用是基于构件的软件开发(CBD)。
- 模式优点:
- 高度模块化
- 数据隐藏
- 代码共享
- 灵活易维护
- 模式缺点:
- 对象之间调用复杂
3. 层次结构模式
- 层次结构模式采用层次化组织方式,将复杂问题逐步分层。
- 每一层都为上一层提供服务,并使用下一层提供的功能。
4. 客户/服务器模式
- 客户/服务器(C/S)模式将应用一份为二,服务器负责数据管理,客户机完成与用户的交互任务。
- C/S模式适用于分布式系统,得到了广泛的应用。
- 为了解决C/S模式中服务端负担过重的问题,发展形成了多层C/S模式,即多层应用架构。
- 为了解决C/S模式中客户端更新的问题,发展形成了浏览器/服务器(B/S)模式。
5. 事件驱动模式
- 构件并不直接调用过程,而是触发一个或多个事件。系统中的其他构件可以注册相关事件,触发一个事件时,系统会自动调用注册了该事件的构件过程,即触发事件会导致另一构件中过程的调用。
6. 软件架构设计考虑因素
- 关系数据库与对象数据库的选择问题。
- 用户界面选择使用HTML。
- 灵活性和性能的权衡。
- 技术的选择,成熟技术可规避风险。
- 聘请经验丰富的架构师。
三、软件架构评估
- 在架构评估过程中,评估人员最关注的是系统的质量属性。
- 质量属性包括:可用性、可修改性、性能、安全性、可测试性、易用性。
- 敏感点:一个或多个构件的特性,敏感点只影响一个软件质量属性。
- 权衡点:影响多个质量属性的特性。
- 软件架构评估的三种方法:
- 调查问卷法:请对系统架构有经验的专家对系统架构做出主观评估。
- 度量法:将软件系统架构量化,通过客观指标来评估架构优劣。
- 场景评估法:筛选重要场景,根据不同场景中各架构的表现进行评估(ATAM)。
1. 场景评估法
- 场景评估法从三方面来对场景进行捕述:
场景 | 描述 |
---|---|
刺激(stimulus) | 解释或描述项目干系人怎样引发与系统的交互。 |
环境(environment) | 刺激发生时的情况。 |
响应(response) | 系统是如何通过架构对刺激作出反应的。 |
- 场景评估法分析软件架构对场景的支持程度,从而判断该架构对这一场景所代表的质量需求的满足程度。
四、软件设计
- 软件设计是定义一个系统的架构、组建、接口和其他特征的过程,并得到这个过程的结果。
- 软件设计阶段:
- 概要设计(软件架构设计):描述软件的组织和结构,标识各种不同的组件。
- 软件详细设计:详细的描述各个组件,使之能被构造。
- 软件设计方法:
- 结构化设计SD:是一种面向数据流的方法,他一SRS和SA阶段所产生的DFD和数据字典为基础,是自顶向下、逐步求精和模块化的过程。
- 面向对象设计OOD:面向对象方法已可维护性和可用性为设计基础,更接近现实世界、更自然。
- 软件设计的原则为:高内聚、低耦合。
1. 内聚性
- 内聚性又称块内联系,指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。
- 内聚按强度递增顺序排序如下:
- 偶然内聚
- 逻辑内聚
- 时间内聚
- 通信内聚
- 顺序内聚
- 功能内聚
2. 耦合性
- 耦合性也称为块间联系,指软件系统结构中各模块间相互联系紧密程度的一种度量。
- 耦合程度从低到高排序如下:
- 无直接耦合
- 数据耦合
- 标记耦合
- 控制耦合
- 公共耦合
- 内容耦合
五、设计模式
- 设计模式代表了最佳实践,它使人们可以方便地服用成功的软件设计。
- 每一个模式描述了一个不断重复发生的问题,以及改问题的解决方案。
- 设计模式的基本要素:
- 模式名称
- 问题描述
- 目的
- 解決方案
- 效果
- 实例代码
- 相关设计模式
1. 设计模式的七大原则
原则 | 描述 |
---|---|
开闭原则 Open CLose Principle |
对扩展开放,对修改关闭。 |
里氏代换原则 Liskov Substitution Principle |
任何基类可以出现的地方,子类一定可以出现。 |
依赖倒转原则 Dependence Inversion Principle |
针对接口编程,依赖于抽象而不依赖于具体。 |
接口隔离原则 Interface Segregation Principle |
使用多个隔离的接口,比使用单个接口要好。 |
迪米特法则 Demeter Principle |
一个实体应当尽量少地与其它实体发生相互作用。 |
合成复用原则 Composite Reuse Principle |
尽量使用合成/聚合的方式,而不是使用集成。 |
单一职责原则 Single Response Principle |
设计功能单一的类,不要在一个类中实现多个功能。 |
2. 设计模型分类
- 创建型模型,用于创建对象:
- 工厂模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 结构型模式,用于处理类或对象的组合:
- 适配器模式
- 桥接模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
- 行为模式,用于描述类或对象的交互以及职责的分配:
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模板方法模式
- 访问者模式
六、软件架构和设计模式
- 相同点:
- 都是处理一些抽象概念间的关系。
- 不同点:
- 设计模式是领域无关的,解决某些抽象问题。
- 软件架构针对要解决的问题,是领域相关的。
- 可以通过对问题领域的分析、分解,找到与解决问题相匹配的模式,把各种模式结合在一起构件整个系统架构。