2.软件架构设计

2.软件架构设计

软件本身的特征决定了它在软件开发的过程中以及软件投入使用后,都需要不断地迭代更新。软件开发不仅要实现功能需求,还要兼顾软件的可扩展性、可维护性、高复用性,这就需要从软件的架构设计着眼,而不是只从需求的实现着眼。

当今,每个行业的生产模式基本都是通过高度的专业性分工来实现的,每个细分模块实现的细节都封装在模块内部,向外只暴露连接的接口。细分模块通过事先确立的接口连接在一起,成为一个产品。各个模块体现高内聚、低耦合的特点。软件的生产方式和其他行业也是共通的。下面介绍一个计算机生产的例子。

计算机的生产厂家需要生产计算机的每一种配件吗?当然不需要。几乎每一种配件都由专门的厂家生产,如主板、内存、显卡、网卡等。不同厂家生产的同一种配件是不相同的,那么为什么不同厂家生产的配件可以组装为一部计算机呢?而且,用购买的新配件替换掉原有的某个配件后,为什么整个计算机还可以正常工作呢?这是因为每一类配件都遵从特定的标准接口,这样不管配件的具体制造方式是什么,只要符合接口,配件就可以插入计算机主板的特定插槽中,和其他部件协同工作。由此,事先确定配件的接口是很重要的,就算配件的实现方式不同或者改变了,也是可以方便替换的,而且整个系统的结构是不变的,配件的替换不会影响到整个结构和其他的配件。如图3.0.2所示,主板上的各种插槽以及各种配件都遵从特定的接口方式。

图3.0.2 计算机主板示意图

不仅仅是计算机,其他很多的产品也是依照这样的生产方式生产的,先制定行业产品的接口标准,然后各种配件的厂家就可以同步研发和生产,最终各种配件可以组装为成品。现代社会的专业化程度越来越高,如果由一个厂家生产所有的配件,那么工作效率是很低的,很多时候这也是不可能的。

同理,把整个软件划分为不同的软件部件时,首先需要定义软件部件的接口,而软件部件是面向接口进行开发的,这样软件部件具有相对独立性,软件部件的修改、扩展、替换都会比较灵活,不会影响到其他部件和整个软件结构。划分软件结构、定义软件各部分之间的接口就是在实现软件具体功能前要进行的软件架构设计工作。

当前的应用软件开发一般都采用多层的体系结构,具体的层次划分方式要视项目的规模特点而定,在一般情况下,可以划分为表现层、业务层、数据层,如图3.0.3所示。

图3.0.3 软件开发多层体系结构示意图

每个层完成特定的功能,层与层之间存在自上而下的依赖关系,即上层组件会访问下层组件提供的接口,而下层组件不依赖上层组件。例如,表现层调用业务层的功能,而业务层调用数据层的功能。每个层对上层公开调用接口,但是隐藏具体的实现细节。当某一层的实现发生变化时,只要它的调用接口不变,就不会影响其他层的实现,这样就提高了软件的可维护性,也提高了代码的重用性(例如,多种表现层可以共用业务层),也提高了项目管理和分工并行的效率。

下面以一个公司人员信息管理系统的基本软件架构设计为例,开始了解基本的面向对象程序设计。