当前课程知识点:软件工程 >  第11章 软件系统设计 >  11.4 软件体系结构风格(二) >  讲授视频

返回《软件工程》慕课在线视频课程列表

讲授视频在线视频

下一节:讲授视频

返回《软件工程》慕课在线视频列表

讲授视频课程教案、知识点、字幕

层次化已经成为一种

复杂系统设计的普遍性原则

很多复杂软件的设计

从操作系统到网络系统

再到一般的应用

几乎都是以层次结构来建立的

在层次结构中

系统被分成若干层次

每一层次由一系列的构件所组成

层次之间存在接口

通过接口形成调用

和返回的关系

下层构件向上层构件提供服务

上层构件被看作是

下层构件的客户端

这是我们前面提到过的

安卓操作系统的例子

它被划分成Linux内核

系统运行库

应用框架和应用

四个层次

这是一个网络的分层模型

它包括物理 数据链路

网络 传输 会话 表示

和应用等层次

并且严格限定

某一层的构件

只能和同一层的对等实体

以及和它紧邻的下一层进行交互

客户机/服务器体系结构

是一种分布式的系统模型

它把应用程序的处理

分成了两个部分

一个是客户机

负责和用户进行交互

另一个是服务器

它为客户机提供服务

最早的分布式系统是两层的

一个是客户机

一个是数据库的服务器

后来发展成为三层结构

中间增加了一个应用服务器层

现在已经发展成为一个

多层的体系结构

两层的客户机服务器结构

也称为胖客户端模型

在这种系统中

数据库服务器

负责数据的管理

客户机实现应用逻辑

并和用户进行交互

具体的过程是这样的

用户在客户机的系统界面上

输入数据

并发出业务处理请求

客户机上的业务处理程序

接受请求 进行处理

在需要进行数据存取的时候

向服务器发出数据存取请求

服务器将执行数据库连接 查找

和存取的操作

并把结果进行返回

客户机的业务处理程序

处理完用户请求之后

在表示层上进行输出

两层结构的主要问题

在于客户端的负担过重

系统维护和升级比较困难

扩展性也不太好

与胖客户端相对应

还有一种瘦客户端

二者的区别在于业务逻辑

到底在客户端多一些

还是在服务器端多一些

如果客户端

执行大部分的数据处理操作

那么就是胖客户端

如果客户端具有很少

或者没有业务逻辑

那就是瘦客户端

针对两层结构的问题

人们提出了三层客户机

服务器结构

它把应用系统

分成表示层 功能层

和数据层三个部分

而且把这三层进行明确的分割

在逻辑上使其独立

其中表示层

是应用的用户接口部分

负责实现用户和应用之间的对话

业务逻辑层

实现应用程序的处理逻辑和规则

数据层实现对数据库的存储

查询和更新

在硬件部署时

三层结构的表示层

可以配置在客户端

功能层和数据层

分别放在不同的服务器上

这样就大大降低了

客户端的负荷

也减轻了系统维护和升级的成本

和工作量

在增加新的业务处理时

可以相应的增加

装有功能层的服务器

系统的灵活性

和伸缩性变得很强

特别是随着系统规模的加大

这种结构的优势

就变得更加明显

但是需要注意的是

三层结构中

各层之间的通息效率如果很低

即使分配给各层的硬件很强

系统在整体上

也达不到所要求的性能

所以在设计的时候

必须要慎重考虑

三层之间的通讯方法 频率

和数据量

随着互联网技术的发展

浏览器/服务器结构

也称B/S结构逐渐流行

它是三层C/S结构的一种实现

它的客户端就是浏览器

表示层负责处理客户端

所需要的展现逻辑

应用层负责所有的业务逻辑

数据层负责对数据库的操作

层次架构的基本思想

是把一个应用

分成多个逻辑层

其中每一层都有通用

或者特定的角色

这样做

可以使应用更易于扩展

在实际部署时

功能层并不一定只驻留在

同一台服务器上

数据层也是这样

如果功能层或者数据层

分布在多台服务器上

那么就形成了集群式的系统结构

许多C/S结构的应用系统

都是从数据库中检索数据

再展现给用户

在用户更改数据之后

系统再把更新的内容

存储到数据库中

具体实现的时候

数据存取逻辑

是和用户界面绑在一起的

这样可以提高应用程序的性能

但是这种做法是有问题的

一般来说

用户界面的更改

往往要比数据存取更加频繁

而且除了数据存取之外

应有程序的业务逻辑中

往往还会包含

很多其他的业务逻辑

显然

用户界面一旦更改

就会影响到数据存取逻辑部分

这样是不满足高内聚

低耦合的设计原则的

那么纯粹的B/S结构

能不能解决这个问题

由于用户界面

仍然需要显式地调用

功能层的业务逻辑

所以还是很难避免用户界面修改

导致业务逻辑修改这个问题

所以说

我们需要进一步改进这个结构

以保证各个部分可以单独修改

而不影响其他部分

我们先来分析一下

影响Web系统模块化的一些因素

在这种系统中

用户界面的更改

要比业务逻辑更加频繁

如果把两部分的代码

都放在用户界面中

那么每一次更改用户界面

就会引起业务逻辑的修改

有些情况下

应用程序会用不同的方式

来显示同一个数据

比如说用表格

各种图形等等

那么

与业务逻辑相比

用户界面的代码

对设备的依赖性就会更大

设计美观

而且有效的用户界面

和开发复杂的业务逻辑

往往需要不同的编程技能

可能需要不同的人来编写

而且

为用户界面创建自动化的测试

也要比业务逻辑更难 更耗时

为了解决上述问题

人们提出了

模型-视图-控制器结构

也称MVC结构

它是把应用程序的数据模型

业务逻辑和用户界面

分别放在独立的构件中

这种结构

是在传统的B/S体系结构基础上

加入了一个新的元素

控制器

由控制器来决定视图

和模型之间的依赖关系

这样用户界面的修改

就不会对数据模型

或者业务逻辑造成太大的影响

其中模型

用于管理应用系统的行为和数据

它在发生变化时

会通知视图

并且允许视图

查询它的当前状态

同时也允许控制器

访问在模型中封装的业务功能

视图负责模型内容的展现

控制器则是定义了

应用系统的控制行为

负责分派用户的请求

并且针对用户请求

选择相应的视图

现在我们来看一个

Web应用的执行过程

客户端发送一个HTTP请求

这个请求首先会进入到控制器

然后控制器去获取数据

把它封装成模型

最后再把模型传递到视图中

进行展现

这个过程存在下面一些问题

我们看到每一次请求

都要经过控制器 模型

视图这样一个流程

用户才能看到最终展现的界面

整个过程比较复杂

实际上

视图是依赖于模型的

也就是说

如果没有模型

视图是无法展现最终的效果

另外渲染视图的过程

是在服务端来完成的

最终呈现给浏览器的

是带有模型的视图页面

系统的性能无法得到很好的优化

为了使数据展现过程更直接

而且有良好的用户体验

我们需要对MVC模式进行改进

现在来看一种改进的方案

首先从浏览器发出AJAX请求

然后服务端接受这个请求

返回JSON的数据给浏览器

最后在浏览器中

进行界面的渲染

如果我们把浏览器这一端

视为前端

服务器视为后端的话

上面改进后的MVC模式

可以简化为前后端分离的模式

现在有一种REST的机制

可以实现这个模式

关于这一部分的内容

我们将在下一章

进行详细讲解

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲授视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。