软件工程复习(十)

要求

OO设计步骤,结构优化准则,对照架构模式,设计原则和设计模式

面向对象的设计准则

  • 模块化
  • 抽象
  • 信息隐藏
  • 弱耦合
  • 强内聚
  • 可重用

启发规则

  • 设计结果应该清晰易懂

  • 提高软件可维护性和可重用性重要措施

    • 用词一致
    • 使用已有的协议(重载)
    • 减少消息模式的数目
    • 避免模糊的定义
  • 一般—特殊结构的深度应适当

    • 应该使类等级中包含的层次数适当
  • 设计简单的类

    • 尽量设计小而简单的类,便于开发管理
      • 避免包含过多的属性
      • 有明确的定义
      • 尽量简化对象之间的合作关系
      • 不要提供太多服务(保持适当内聚的基础上)
  • 使用简单的协议

  • 使用简单的服务

  • 把设计变动减至最小(结构稳定)

架构模式(Architecture Patterns)

An architectural pattern is a proven structural organization schema for software systems(架构模式是指用于软件系统中经实践证明的机构化的组织格式化)

层次、CS、MVC、Pipe-Filter、Master-slave

  • 层次架构

    • eg: 网络协议(OSI/ISO 七层模型)
    • 每层向上层提供服务
    • 越低层越稳定
    • 职责分离,每层可独立开发
    • 提供给上层高的抽象接口不容易写
    • 低层可能做一些高层用不到的功能
  • MVC架构

    • model: 核心功能和数据(是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据)
    • view: 向用户展示信息(是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的)
    • controller: 处理用户的输入(是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据)
    • 用于交互式系统
    • 控制流程
  • CS架构

    • Server组件向多个client提供服务
    • 客户端通过向服务器请求得到服务
    • 请求是在进程和机器边界上完成的
      • 采用进程间通信机制
      • 而层级架构则是横跨进程和机器边界
    • Server通常是长期运行的,拥有监听来自Client的请求
    • Examples
      • Remote DB access (远程数据库接入)
      • Remote file systems(远程文件系统)
      • Multi-tier information system(多层信息系统)
      • Web applications(网页应用)
    • 通常在单独的线程中处理请求
    • Server和Client的交互通常包含在一个session(会话)中
    • Stateless servers(无状态的服务)
      • 会话状态由client保存(例如:cookie机制)
      • 每个请求都带上client保存的会话状态信息
    • Stateful servers(有状态服务)
      • 会话状态由Server端保存
      • 所有的Client的请求都关联到其对应的client-id
  • Master-slave(主从模式)

    • 主从模式支持容错并行计算
    • 主组件将工作分配给若干个从组件,从组件各自计算,最后主组件从这些从组件返回的结果中计算最终的结果
    • Examples:
      • Process control(进程控制)
      • Embedded systems(嵌入式系统)
      • Large-scale parallel computations(大规模并行计算)
      • Fault tolerant systems(容错系统) ==> 比如磁盘阵列(可以用其中一块或多块硬盘做奇偶校验,可以达到容错的效果)
    • 执行流程:
    • 分析:
      • 一旦Master挂掉,整个系统也就挂了
      • 从组件之间是独立的,不共享状态
      • 从组件之间可以并行运行
      • 对于硬实时系统(对延迟很敏感),主从组件之间的通信延迟可能是一个问题
      • 要解决的问题必须是可分解的
    • 应用领域:
      • 容错
      • 并行计算
      • 精确计算
  • Pipe-Filter(管道过滤器模式)

    • 该架构适用于处理数据流的系统
    • 一个处理都封装在一个过滤器组件当中
    • 数据通过相邻过滤器之间的管道(pipe)进行传输
      • pipe主要负责处理缓存和同步
    • Examples
      • Compilers(编译器)
      • Unix shell commands
    • 分析:
      • 很容易插入新的过滤器
      • 过滤器可重用
        • 过滤器可以被独立开发
        • 潜在数据转换开销
      • 输入可以来自不同的数据源,输出也可以输出到不同的地方
      • 天然的并行处理
      • 过滤器间不共享状态
      • 不适用于交互式系统,适用于批处理系统
    • Java中的管道
      • InputStream in = new BufferedInputStream(new DataInputStream(System.in))
  • Broker(代理模式)

  • Peer-to-peer(P2P模式和)

  • Event-bus

  • Blackboard

坚持原创技术分享,您的支持将鼓励我继续创作!