在介绍架构设计之前,下面先介绍软件系统的设计包括哪些内容。整个系统的设计应该始于需求分析,有一部分可以在需求分析的后期并行展开。按照时间先后顺序,所有的设计包括架构设计、概要设计、详细设计、界面设计、数据库设计和程序设计。
· 架构设计: 大中型系统的业务复杂度、技术复杂度都比较高,这时系统的设计应该始于架构设计。先考虑系统的总体结构,再进行各种技术决策。后面的设计需要以架构设计为基础展开。
· 概要设计: 基于功能视角考虑系统的功能模块划分、接口定义。
· 详细设计: 考虑单个功能模块的逻辑。模块分为有界面和无界面两种。有界面的模块为前端模块,需要说明其界面布局和事件响应逻辑;无界面的模块有批处理型和服务型,需要说明其输入/输出和处理过程的逻辑。
· 界面设计: 考虑系统的用户界面,包括界面的静态布局、事件响应逻辑、界面间跳转等。如果需求分析采用原型法,则界面设计会提前到需求分析阶段;否则界面设计应当在详细设计阶段实施。
· 数据库设计: 考虑数据模型设计。
· 程序设计: 考虑代码的工程结构、数据结构、类设计和处理流程等。
有些术语的含义比较模糊,或者在发展过程中意义发生了变化。概要设计的说法出现得比较早,是单体应用时代的说法。在单体应用时代,因为软件的结构简单,往往是单个程序或结构简单的C/S系统或B/S系统,一般采用单一的技术,如ASP,所以对系统的分解主要着眼于功能模块,功能模块要相互协作就必须定义接口。在系统复杂化之后,需要先做架构设计,概要设计的意义被弱化,有时架构设计就包含了传统意义上概要设计要做的工作。
详细设计在某些情况下可以省略,如模块过于简单,项目过程是敏捷过程,以及软件组织缺乏过程规范等,这时程序员可能基于需求或界面原型开发。
程序设计现在也被弱化了。在面向对象编程时代,需要做的是类设计、处理流程的顺序图。随着各种框架的成熟,代码工程被标准化,项目中可以发挥的空间越来越小。可以认为代码工程是框架部分和若干功能模块的结合。其中,有技术含量的是框架部分,可能会有很多值得使用设计模式的地方,但随着软件组织的技术积累,框架部分会逐渐固定下来,在项目中直接复用,没有发挥空间;功能模块部分需要按照框架制定的规则来实现,可能每个模块就是框架要求的几个类。因此,对于一般的功能模块来说,程序设计已经没什么可做的,可能只有一些复杂的模块需要进行特别的程序设计。