要求
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