面向对象分析与设计方法

软件体系结构
与设计模式

软件工程 第三部分 第7章,主讲人:李欣

Created: 2024-03-05 Tue 16:42

0.1. 互动课堂

Click to host the seminar.

0.2. 签到

https://dash.memopixel.com/tool/attendance/

0.3. 本次课的目标

  • 第三部分:面向对象分析与设计方法
    • 第7章:软件体系结构与设计模式
      • 软件体系结构的基本概念
      • 典型的体系结构风格
      • 特定领域的软件体系结构
      • 分布式系统结构
      • 体系结构框架
      • 设计模式

1. 软件体系结构的基本概念

1.1. 什么是体系结构

Bass Clements Kazman 给出的定义
  • 一个 程序计算机系统软件体系结构 是指系统的 一个 或者 多个 结构
    • 结构 中包括软件的 构件 、构件的
      外部可见属性 以及它们之间的相互 关系
      • 外部可见属性 是指软件构件提供的 服务性能使用特性
        错误处理共享资源使用 等。

这一定义强调在任意体系结构表述中 软件构件 的角色。

Dewayne Perry Alexander Wolf 给出的定义

软件体系结构是具有一定形式的 结构化元素 ,即 构件 的集合, 包括处理构件、数据构件和连接构件。

  • 处理构件 负责对数据进行加工,
  • 数据构件 是被加工的信息,
  • 连接构件 把体系结构的不同部分组合连接起来。

这一定义注重区分处理构件、数据构件和连接构件。

1.2. 体系结构模式、风格和框架的概念

模式

软件设计模式是从软件设计过程中总结出来的, 是针对特定问题的解决方案。

建筑师 C. Alexander 对模式给出的经典定义是:

每个模式都描述了一个在我们的环境中不断出现的
问题 及该问题 解决方案 的核心。

%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
graph LR
    P["模式"]
    P --- A["体系结构模式(architectural pattern)"]
    P --- D["设计模式(design pattern)"]
    P --- I["惯用法(idiom)"]

software-architecture-pattern.svg

Figure 1: 软件系统中的3类模式

风格
  • 风格是带有一种倾向性的模式。
框架
  • 随着应用的发展和完善,某些带有整体性的应用模式被逐渐固定下来, 形成特定的框架,包括基本构成元素和关系。

1.3. 体系结构的重要作用

  • 体系结构的表示有助于风险承担者(项目共利益者)进行 交流
  • 体系结构突出了早期设计 决策
  • 软件体系结构是 可传递可复用 的模型。

2. 典型的体系结构风格

2.1. 数据流风格

  • 管道/过滤器
  • 批处理序列

2.2. 调用/返回风格

  • 主程序/子程序体系结构
  • 面向对象风格
  • 层次结构风格

2.3. 仓库风格

  • 数据库系统
  • 超文本系统
  • 黑板系统

3. 特定领域的软件体系结构

  • 类属模型
  • 参考模型

4. 分布式系统结构

硬件技术发展的两个主要趋势
  • 带有多CPU的计算机系统逐渐进入小型办公场所
    • IBM OS/2 Warp, IBM z/OS
    • Microsoft Windows NT
    • UNIX
  • 在局域网内链接成百上千台不同种类的计算机已经变得很平常
分布式计算模型具有的优点
  • 资源共享
  • 经济性
  • 性能和可扩展性
  • 固有分布性
  • 健壮性

4.1. 多处理器体系结构

多处理器系统
  • 是分布式系统的最简单的模型;
  • 由许多进程组成,且进程可在不同的处理器上并行运行。

极大地提高系统的性能。

4.2. 客户机/服务器体系结构

  • 客户机/服务器(C/S)体系结构 的3个主要组成部分
    • 服务器 : 负责给其他子系统 提供服务
    • 客户机 : 向服务器 请求服务
    • 网络连接 客户机和服务器
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
flowchart TB
    CS["C/S体系结构"]
    CS --- CS2["二层C/S体系结构"]
    CS --- CS3["三层C/S体系结构"]
    subgraph G21[" "]
        C21A["服务器:数据管理与应用逻辑层"]
        C21B["客户机:表示层"]
    end
   subgraph G22[" "]
       C22A["服务器:数据管理层"]
       C22B["客户机:应用逻辑与表示层"]
   end    
   subgraph G3[" "]
       CS3R["客户机:表示层"]
       CS3A["应用服务器:应用逻辑层"]
       CS3D["数据服务器:数据层"]
   end
   CS2 --- CS2T["瘦客户机模型"]
   CS2 --- CS2F["胖客户机模型"]
   CS2T -..- G21
   CS2F -..- G22
   CS3 -..- G3

cs-architecture-types.svg

Figure 2: C/S体系结构

4.3. 分布式对象体系结构

分布式系统设计的更通用方法是去掉 客户机服务器 之间的差别, 用 分布式对象 体系结构来设计系统。

参考教材

  • 7.4.3 pp.172-173

4.4. 代理

代理可以用于构建带有隔离组件的分布式软件系统, 该软件通过远程服务调用进行交互。

对象请求代理(Object Request Broker, ORB)上的4个对象接口
  • 对象服务
  • 公共设施
  • 领域接口
  • 应用接口

5. 体系结构框架

5.1. 模型-视图-控制器(MVC)

一个交互式应用系统由模型(Model)、视图(View)和控制器(Controller)3个部分组成, 分别对应于内部数据、数据表示和输入输出控制部分。

%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
flowchart TB
    M(("模型"))
    V(("视图"))
    C(("控制器"))
    M --> |"通知改变"| V --> |"状态查询"| M
    V --> |"用户请求"| C --> |"视图选择"| V
    C --> |"状态改变"| M
    subgraph GM[" "]
        direction TB
        MA["封装应用程序状态"]
        MB["相应状态查询"]
        MC["通知视图改变"]
    end
    subgraph GV[" "]
        direction TB
        VA["解释模型"]
        VB["向控制器转发用户输入"]
    end
    subgraph GC[" "]
        direction TB
        CA["定义用户行为"]
        CB["选择与功能相对应的视图"]
    end
    M -.- GM
    V -.- GV
    C -.- GC

mvc-architecture.svg

Figure 3: MVC框架

5.2. J2EE体系结构框架

J2EE的核心体系结构是在MVC框架的基础上扩展得到的。

J2EE模型的分层结构
  • 客户层 :用户通过该层与系统交互。
  • 资源层 :企业数据库、电子商务解决方案中的外部企业系统、外部SOA服务等。
  • 表示层 :用户通过该层来访问应用程序。
  • 业务层 :保护表示层中的控制器构件没有实现的一部分应用逻辑。
  • 集成层 :负责建立和维护与数据源的连接。

5.3. PCMEF与PCBMER框架

  • PCMEF框架
  • PCBMER框架

6. 设计模式

  • 抽象工厂
  • 单件
  • 外观
  • 适配器
  • 职责链
  • 中介者
  • 观察者

7. 课后作业

  1. 习题7.6 浏览器/服务器体系结构有什么优点和缺点?
  2. 习题7.9 什么是设计模式?常用的设计模式有哪些?