2007-08-23

软件体系结构模式-层

Views: 11154 | Add Comments

关于体系结构模式

软件系统的开发过程涉及到三种模式:

  • 体系结构模式
  • 设计模式
  • 惯用法

体系结构模式关于软件系统的整体结构. 而设计模式是比体系结构模式规模小的中等规模的模式, 它主要关注 API 的协作. 模型-视图-控制器(MVC)模式是最著名的体系结构模式.

层(Layer)是一种体系结构模式, 它将系统水平分割为多个抽象的层次. TCP/IP 网络是层模式的最著名例子.

层通信

通信可以分为两种模式: 推模式和拉模式. 下面我们以一个5层结构的系统分析层通信的主要模式.

1. 层直接调用(API)的拉模式

         read            read            read            read
Layer 1 ------> Layer 2 ------> Layer 3 ------> Layer 4 ------> Layer 5

在这种通信模式中, 层直接调用相邻层的 API 完成通信. 活动从 Layer 1 开始, 它调用 Layer 2 的 read 方法获取数据, Layer 2 再调用 Layer 3 的 read 方法, 如此. 在代码中, 这种模式的最重要表现是某一层包含了另一层的一个引用.

2. 层直接调用(API)的推模式

         write           write           write           write
Layer 1 <------ Layer 2 <------ Layer 3 <------ Layer 4 <------ Layer 5

这种通信模式和上一种很相似. 但活动从 Layer 5 开始, 它将数据压入 Layer 4, 并等待 Layer 4 处理完该数据再返回.

3. 层是一个独立的处理机(stand-alone)

            ___
Layer 1 ===[___]=== Layer 2 ...

在这种通信模式中, 层作为一个独立运行的进程或者线程. 层通信通过一个管道(通道), 层从管道中读取数据, 将数据定义管道. 管道中一般有缓冲区. 层与层之间是完全分离的, 不存在相互调用的问题. 管道既可以通过 API 来实现(在线程中), 也可以使用操作系统的管道, Socket 通信等方式.

在上面的三种层通信模式中, 前两种通过 API 调用来通信, 所以导致层之间耦合度太大, 不利于测试. 即使使用编程语言的接口特性(如 Java 中的 interface)也无法解决这些问题. 而且, 一个层不再被调用时, 它就不会执行.

第三种通信模式是最典型, 一个例子是 TCP/IP 网络. 每一层作为一个独立的处理机, 就可以独立编写和测试每一个层, 而且层的运行不再受其它层的影响, 只受到管道的影响.

参考文献

面向模式的软件体系结构-卷1:模式系统, Frank Buschmann 等著, 机械工业出版社.

Related posts:

  1. 结合IO多路复用的多线程服务器模型
  2. Windows Python select标准输入输出
  3. 在Linux进行IO的正确姿势
  4. TCP网络协议及其思想的应用
  5. 经典的 TCP socket 读取报文错误
Posted by ideawu at 2007-08-23 08:19:49

Leave a Comment