《信息系统分析与设计》10 - 系统总体设计

学习笔记 · 2022-09-05
《信息系统分析与设计》10 - 系统总体设计

软件架构的设计

什么是软件架构

架构的概念:

建筑、文学、音乐、机械、电子、计算机软硬件等领域都会使用“架构(architecture”这一概念。架构都提供了系统最高层的设计方案,以确保建筑、小说、乐曲、设备、计算机等系统满足期望的特性。

架构包含系统的一组基本结构(structure,每种结构都有各种类型的部件(component及其关系构成,架构描述了这些部件的组合、相互调用参照、通信以及其他动态交互。

架构和结构的关系:

  • 架构是抽象无形的,体现高层全局的决策,就像文章的中心思想和提纲。
  • 结构是具体有形的,体现决策的贯彻,如同文章的每个段落及细节描述。
1、软件架构

软件架构(software architecture)的定义没有统一的版本

一般认为:一个应用程序或计算系统的软件架构是一个或一组结构,它包含组成系统的软件元素、这些元素对外可见的性质以及它们之间的关系。

对外 可见的性质 指软件元素能够提供的服务、性能特征、错误处理、共享资源的用法等。

  • 软件的一个结构元素可能是一个子系统、构件、进程、库、数据库、计算结点、遗留系统等等。

软件架构最高层次系统分解,它不会囊括所有的结构和行为的定义,它只关注那些被认为重要的元素

  • 架构难以更改,一旦修改,意味着整个系统重建,而结构修改只影响局部。

软件架构(software architecture)包括逻辑设计和物理部署两方面

  • 逻辑设计:通过对系统的层、包、类、接口和子系统的组织方式来描述;
  • 物理部署: 描述了进程分配和网络配置。
2、软件架构模式

大部分的架构来源于有相似关注点系统总结和抽象,这些相似性被描述成某种特殊模式的架构风格,也就是架构模式architectural pattern)。

一种架构模式就是一个经验秘籍,架构师在设计不同系统时可以重复使用这些先进经验。

简单来说:软件架构模式就是可重复使用的软件结构风格。

多层应用架构设计

1、分层的含义

分层模型的理念就是将任务横向划分(如高层、中层、基层)为不同级别,而不是纵向

基于组件的软件开发,组件根据 横向位置 划分为多层(N-Layer

  • 下层组件负责对上层组件提供服务
  • 上层组件可以使用下层组件定义的服务,但下层组件对上层组件一无所知。
  • 层与层之间通常是不透明的,每一层都具有独立的职责
  • 不同层的软件构件可以分布在多台机器上,也可以部署在同一台机器上,形成物理上的多层(N-Tier
  • 层次模型的理念就是将整个任务横向划分为不同级别,而不是纵向

C/S出现之后,软件就被分层了

  • Client端的软件完成前台任务,Server端的软件完成后台任务(一般是DB Server);
  • Client使用Server端的服务,依赖于Server端。

Internet出现之后,软件进一步分层

  • Client端的软件(浏览器)完成输入输出任务,Web Server上的程序提供业务逻辑处理,后台DB Server完成数据的存取。
  • C/S常被称为传统的两层B/S称为三层
2、三个基本层次

传统的C/S应用程序

1.界面窗口程序中包含所有的内容,如输入输出、界面逻辑控制、业务逻辑运算等。

2系统架构是两层,应用架构没有分层。

经典的三层架构

经典的三层架构.png

1 表现层:处理用户和信息系统之间的交互。

可以是简单的命令行窗口,也可以功能完善的图形用户界面(胖客户端程序),如基于HTML的浏览器界面(瘦客户端程序),也可以是手机界面。

2 业务逻辑层:也称为领域层或应用层,是信息系统所有和领域相关的工作。

如根据输入数据或已有数据进行计算,可以是类库或Web服务。依赖于数据访问层获取数据或保存数据。

3 数据访问层:一般指与数据库的交互,主要责任是数据库记录的存取。

如组件中包含专门的数据访问类,或每个表对应一个数据访问类

扩展的五层架构
1 表现层:等同于三层中的表现层。

2 控制层/中介层:是表现层和领域层的中介层,也称应用控制器。

主要表示业务逻辑中的工作流,一般针对于用例的事件流控制。此外还负责会话状态、数据的合成或分解等事务。

3 领域层:业务逻辑中的领域类的集合,不包含复杂工作流。

4 数据映射层:负责将基于对象的领域层数据映射到数据库关系表中的记录。也称为数据持久层,可自行开发或采用持久化框架。

5 数据访问层:负责数据库表的增删改查等操作。持久化框架中包含该层组件。

MVC架构模式(当前最常用的架构)

1模型(Model):代表数据,使用对象及其属性实现。

2控制器(Controller):是模型与视图的联系纽带,客户的请求由控制器处理,它根据客户的请求调用模型的方法,完成数据更新,然后调用视图的方法将响应结果展示给客户。相应的,模型的更新与修改将通过控制器通知视图,保持视图与模型的一致性

3视图(View):是模型的外在表现形式,视图可以直接访问模型;查询数据信息,当模型中数据发生变化时,它会通知视图刷新界面,显示更新后的数据。

MVC.png

MVC模式和三层模式有共同特点(业务逻辑、数据和表示的分离),但不完全遵守分层约定。

多层体系结构的优势

1客户对数据的访问通过中间层进行了隔离,数据库的安全性提高了。

2应用程序分布部署在多个物理节点上成为可能,从而增强了处理大量的用户负载或计算任务的能力,系统可靠性响应速度得到了提高。

3业务逻辑变化后,客户端程序基本不做改动,当组件接口不变时,某一层的改动不会影响其它层,这也意味着更好的重用可维护性

4页面表现开发和业务逻辑开发分离,有效地利用开发人员的专长和开发技巧,并且能够 提高并行开发 能力。

3、软件框架
“不要重复发明轮子”

架构模式可以复用,当架构模式的复用形式不仅仅停留在逻辑层面(如蓝图、方案),而以物理的二进制组件的方式提供重用时,就产生了框架

软件框架(software framework)是对整个或部分系统可重用的设计和实现。

框架可以选择对某种架构模式的基本结构和接口机制进行编程实现,不仅封装该架构模式的基本元素对外提供类库,还封装底层公用的流程控制逻辑,从而直接为应用软件提供了最初的骨架。

框架就是一个半成品软件平台,软件框架和应用软件相当于:架构模式/框架/应用程序 => 菜谱菜式/半成品/成品菜;

引入软件框架之后,整个开发过程变成了“分三步走”

1决定应用架构

2选择实现应用架构的现成框架

3基于框架之下编写程序(简单、统一)

优点:代码具有相同规范和结构,易于理解维护;提高效率;更稳定可靠

局限:囿于框架所限定的“框框”之内构建应用程序,比较死板,缺乏灵活性

软件架构与软件结构的区别

1 架构是抽象无形的,体现高层全局的决策,就像文章的中心思想和提纲。

2 结构是具体有形的,体现决策的贯彻,如同文章的每个段落及细节描述。

3 架构包含了结构的初步描述和决策。

4 相同架构的系统,具体结构允许有差异。

面向对象的软件结构设计、类图

根据架构设计类:边界类、实体类、控制类

软件设计原则,高内聚、低耦合

设计原则:总的来说就是抽象与复用(封装、信息隐藏);松耦合

高内聚:内聚指的是一个类的职责间相关联的紧密程度。如果一个类具有很多紧密相关的职责,而且只完成有限的功能,则这个类就具有高内聚性。

低耦合:耦合度是测量一个类连接、了解或依赖其他类的强弱程度。低耦合可以降低依赖性,减小变化带来的影响。

高层结构设计

包(Package)是一种逻辑分组手段,可以取UML模型中的任何一种事物,将相关成分聚在一起,以构成更高层的组织单元——包。

分包(软件类的分组)有两种原则:

  • 共同封闭原则(Common Closure Principle,一个包中的各个类应该是由于相似的原则而改变,即将一组职责相似、但以不同方式实现的类归为一个包中。比如按照层来进行分包就是这种类型。
  • 共同复用原则(Common Reuse Principle,一个包中的各个类应该一起被复用,复用其中一个可能需要同时考虑同一个包中的其它协作类。通常和业务功能相关。

结构化设计方法

模块

模块(Module) 一词使用很广泛。通常对应于用一个名字就可以调用的一段程序语句(子程序或函数。

  • 模块具有输入和输出、逻辑功能、运行程序、内部数据四种属性。
结构图
  • 模块:用长方形表示
  • 调用:从一个模块指向另一模块的箭头表示前一个模块调用后一个模块。有循环调用和条件调用
  • 数据:用带圆圈的小箭头表示从一个模块传递给另一模块的数据(有实义)
  • 控制信息:带涂黑圆圈的小箭头表示一个模块传送给另一模块的控制信息
模块的联系

为了衡量模块的相对独立性,提出了模块间的耦合(Coupling)与模块的内聚(Cohesion)两个标准

  • 耦合:模块和模块之间的联系程度
  • 内聚:模块内部各元素之间的联系程度

设计目标:

1模块内的联系越紧越好

2模块间的联系越少越好

3高内聚低耦合

模块间的耦合

模块间的耦合:耦合是影响系统复杂程度的一个重要因素。

耦合的三个因素1联系方式 ,2、来往信息的作用,3、模块间来往信息的数量。

耦合分类如下:

数据耦合模块间的来往信息可能作为信息使用,也可能作为控制信息的使用,若两个模块间传递的信息只做数据用被合称为数据耦合

标记耦合:如果调用模块将整个数据记录传递给被调模块,而被调模块只使用了部分数据项,则称为标记耦合或特征耦合。

控制耦合:一个模块将控制信息传递给另一个模块,以控制被调模块的内部处理逻辑。(可以分解)

公共环境耦合:如果两个模块共享同一全局数据,直接存取另一个模块的某些信息,称为公共耦合。也叫直接引用

内容耦合:两个模块之间的内部属性有直接关联,也称病态耦合。(某些GOTO语句)

模块的内聚

模块的内聚可以分为以下几类

1、偶然内聚(coincidental cohesion)

2、逻辑内聚(Logical cohesion)

3、时间内聚(temporal cohesion)

4、步骤内聚(procedural cohesion)

5、通信内聚(communicational cohesion)

6、顺序内聚(Sequential cohesion)

7、功能内聚(functional_cohesion):聚合程度是最高

作用范围与控制范围

一个判断的作用范围是所有这样的模块的集合,这些模块类含有依赖于这个判断结果的处理.

一个模块的控制范围,是指它本身集体所有下属模块的集合。这里下属模块包含直接下属模块及下属模块的下属模块。

模块的扇出:是指模块的直属下层模块的个数,

模块的扇入:是指有多少个上级模块调用它。

面向对象设计方法

根据架构设计类:一、边界类 二、实体类、三、控制类

顺序图的基本元素有对象、参与者、生命线、激活框、消息和消息路线。

设计原则

设计原则:单一职责原则、开放封闭原则、Liskow替换原则、依赖倒置原则、接口隔离的原则。

《信息系统分析与设计》
Theme Jasmine by Kent Liao