系统架构设计
我们在进行系统架构设计时,往往将一个系统分解成若干个子系统,每个子系统又分解为若干个程序模块,分解后的子系统和程序模块都会执行一些相对独立的功能,在这里子系统也可以看作是较大的程序模块。分解后的这些子系统和程序模块组成了系统的一个层次结构。
系统的层次结构并没有在前面讨论的系统流程图中反映出来,这就需要另外一种设计模型来反映系统的层次结构,这就是我们将要讨论的系统结构图。
系统结构图也称为层次图,它以层次方式描述了系统从顶层到最底层的功能分解。这种功能分解方法非常适合于设计复杂系统,将复杂系统层层分解,功能由粗到细,由复杂到简单。假如要设计一个图书馆借书系统,我们可以使用功能分解方法来设计这个系统,下面给出系统功能逐层分解的步骤。
根据前期的需求调研,系统分析员和系统设计师得知图书馆借书系统会涉及到图书的管理和读者的管理两个业务,同时还要有维护借书系统的业务。因此,他们把图书馆借书系统分解为三个子系统,这三个子系统分别是图书管理子系统、读者管理子系统和系统维护子系统。下图是第一层功能分解的结构图。
图1 图书馆借书系统第一层分解结构图图
上图中的矩形表示一个子系统或模块,一个子系统可以包含多个模块,一个模块可以表示为一个函数、过程或子程序,或者一个独立的可编译的代码文件。向下带箭头的直线表示高层功能调用底层的功能,上图中图书馆借书系统会分别调用图书管理子系统、读者管理子系统和系统维护子系统。
下面我们来考虑图书馆借书系统第二层功能的分解,第二层功能是三个子系统。从前期的需求调研中可以得知图书管理子系统需要提供图书入库、图书借还、图书查询三个模块;读者管理子系统需要提供读者管理、借阅查询、借阅管理三个模块;系统维护子系统需要提供权限管理、图书备份二个模块。下图是具有三层功能分解的结构图。
图 2 图书馆借书系统三层分解结构图
上图是图书馆借书系统三层分解结构图,对一般规模的系统来说,三层分解结构是比较好的功能分解结构。分解层次过多会导出程序设计趋于复杂,也会增加大量的编码工作。分解层次过少不利于程序模块化,日后的系统维护也会异常困难。
另外,结构图在表示调用结构上是一个严格的体系,一个低层模块是不能够调用高层模块的。通常情况下,高层模块会请求低层模块提供功能和数据,同时也向低层模块传入必要的信息,低层模块处理完毕返回所要求的数据。
在一些结构图中也会绘制一些小箭头表示数据在模块间的传递,以及各个模块的输入与输出。下图是带数据传递信息的结构图。
图 3 带数据传递信息的结构图
上图展示了数据是如何在模块间传递的,带空心圆的箭头叫数据耦合,表示传递给和传递出模块的数据。一个数据耦合可以是一个单独的数据项(如一个读者的账号),也可以是更高层次的数据结构(如一个数组、记录或其它数据机构)。结构图每一层所用的数据耦合类型与层次传递数据的细粒度有关,较高层次的数据耦合往往使用高度耦合的数据结构,而较低层次的数据耦合往往是一些单独数据项或较小的数据结构。
现在我们结合前面学过的系统结构图的知识,来绘制人脉项目系统结构图。系统结构图可以使用Visio工具的基本流程图来绘制,系统结构图的主要图形符号见下表。
人脉系统经过前期需求调研(请参见前面的文章),已经确定了需求功能。根据人脉系统的业务分析和角色用例,可以把人脉系统划分为三个子系统,每个子系统下面包含若干个程序模块,这是一个典型的三层结构系统。下图是绘制的系统结构图。
图 4 人脉系统结构图
上图给出了人脉系统三层结构图,图中描述了系统的模块划分、模块调用和模块间的数据传递关系。实际上各模块间不但有纵向的层次关系,也存在横向关系。例如图中的名片子系统和用户子系统就会调用数据库子系统的存取模块,这些关系都反映在系统流程图中。另外,图中也没有绘制下层模块向上层模块的数据回传,上图的存储模块、查询模块都会有数据回传的要求,图中没有绘制数据回传线,主要是考虑到再绘制数据回传的话,结构图会显得比较混乱,不容易看明白。
系统结构图以层次结构描述了系统在纵向上进行的功能分解,从复杂的大系统层层分解为小的程序模块;系统流程图从较高的功能层次上描述了系统各模块间的横向关系。因此在进行系统架构设计时,系统流程图和系统结构图都需要绘制,才能全面反映系统的体系结构。