随着Web应用的商业逻辑包含逐渐复杂的公式分析计算、决策支持等,使客户机越
来越不堪重负,因此将系统的商业分离出来。单独形成一部分,这样三层结构产生了。
其中‘层’是逻辑上的划分。
三层体系结构是将整个系统划分为如图2.1所示的结构[3]

(1)表现层(Presentation layer):包含表示代码、用户交互GUI、数据验证。
该层用于向客户端用户提供GUI交互,它允许用户在显示系统中输入和编辑数据,同时
系统提供数据验证功能。
(2)业务逻辑层(Business layer):包含业务规则处理代码,即程序中与业务
相关专业算法、业务政策等等。该层用于执行业务流程和制订数据的业务规则。业务逻
辑层主要面向业务应用,为表示层提供业务服务。
(3)数据持久层(Persistence layer):包含数据处理代码和数据存储代码。数
据持久层主要包括数据存取服务,负责与数据库管理系统(如数据库)之间的通信。
三个层次的每一层在处理程序上有各自明确的任务,在功能实现上有清晰的区分,
各层与其余层分离,但各层之间存有通信接口。
采用三层软件设计架构后,软件系统在可扩展性和可复用性方面得到极大提高,在
资源分配策略设计合理运用的同时,软件的性能指标也得到提升,系统的安全性和易管东北
理性也得到改善。
三层体系结构对Web应用的软件架构产生很大影响,促进了基于组件的设计思想,
产生了许多开发Web层次框架的实现技术。较之两级结构来说,三层结构修改和维护上
更加方便。目前开发B/S结构的Web应用系统广泛采用这种三层体系结构。

设计模式起源:
1994 年,由 Erich Gamma,Richard Helm,Ralph Johnson 和 John Vlissides(即所谓的“四人帮’,GoF:Gang of Four)合作的以《设计模式:可复用的面向对象软件的基本原理》为题目的书藉出版了。这本书解释了模式的用处,同时也使得设计模式得到广泛普及。在书中,他们四人记录了他们长期工作中发现的经典 23 个设计模式。
IoC模式
IoC 模式是 Apach Avalon 项目创始人之一 Stefano Mazzocchi 提出的一种代码调用模式,后被 MartinFowlcr 改名为 Dependency Injection(依赖注入),也就是将类和类,方法和方法之间的关系通过第三方(如配置文件)进行“注入”,不需要类或者方法自己去解决彼此间的调用关系。 IoC(Inversion of Control, 控制反转), 是一种用来解决组件(也可以是简单的 Java类)之间依赖关系、配置及生命周期的设计模式,它可以解决模块间的耦合问题。IoC模式它是把组件之间的依赖关系提取(反转)出来,由容器来具体配置。这样,各个组件之间就不存在代码关联,解决了调用方与被调用方之间的关系问题,任何组件都可以最大程度的得到重用。

IoC 模式实现的技术途径
表 2.1 列举出了 IoC 的三种实现方式。本文中设计并实现的服务器端数据验证组件就是采用了第一种类型的 IoC 实现方式。

MVC模式 :
MVC 是 Model-View-Control 的简称,即模型-视图-控制器。它是一个存在于服务器
表达层的模型,它将应用分开,改变应用之间的高度耦合。
MVC 是在 20 世纪 80 年代发明的一种软件设计模式,至今已被广泛使用,最近几年
被推荐为 Sun 公司 J2EE 平台的设计模式。

MVC 模式结构
MVC 模式将应用分为模型、视图和控制器三个部分:
1. 视图:数据的展现。
视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。
2. 模型:应用对象。
模型是应用程序的主体部分。 模型代表了业务数据和业务逻辑; 当数据发生改变时,它要负责通知视图部分;一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。
3. 控制器:逻辑处理、控制实体数据在视图上展示、调用模型处理业务请求。
当 Web 用户单击 Web 页面中的提交按钮来发送 HTML 表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。

MVC 模式运行机制
如图 2.2 所示为 MVC 模式运行机制:

在 MVC 模式中,Web 用户向服务器提交的所有请求都由控制器接管。接受到请求之后,控制器负责决定应该调用哪个模型来进行处理;然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。

框架
软件开发越来越倚重框架的使用。框架可以缩短应用软件系统的开发周期,提高软件生产效率和质量。大大简化了开发。选择何种框架、每个框架如何应用在在系统架构中是软件架构设计的重要环节。
框架的定义
在设计模式中,Gamma 等人为框架给出了一个明确定义:“框架(Framework)是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计”。
框架是一组为相互协作的构件(Component)的集合,它能够处理一个或多个问题域(Domain)中的一系列问题。框架强调的是软件设计的重用性和系统的可扩充性。它是为了追求重用所带来的价值量最大化,而将被重用最多的部分封装成各个组件,辅以回调机制将它们纳入框架的控制范围之内。所以,框架提供了可在应用程序之间共享的可复用的公共结构。

框架的特性
框架包含以下几个关键特性:
1.在应用方面,框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;在目标方面,框架是可被应用开发者定制的应用骨架。
2.框架是一种软件,是应用程序的半成品。它可以供系统开发者选用,以完成系统的开发。
3.框架解决的是某个特定范围即领域的问题。每个框架都有自己的目标领域,它并不能满足所有人的所有需求。

MVC设计模式的总结相关推荐

  1. mvc设计模式现在过时了吗_尚学堂115——设计模式、源码分析以及SpringData

    设计模式 什么是设计模式?你是否在你的代码里面使用过任何设计模式? 设计模式是在软件设计中常见问题的通用.可反复使用.多数人知晓的一种解决方案或模板:这些解决方案是在相当长的一段时间内由众多软件开发人 ...

  2. Flutter开发之MVC设计模式:新建文件与导入文件(八)

    在前面的例子中,所有的代码和路由都是在main.dart 下写的.我们知道不管后台还是前端,不管是Android 还是iOS开发,都是基于MVC设计模式开发的.那么flutter是怎么使用MVC设计模 ...

  3. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  4. IT兄弟连 JavaWeb教程 MVC设计模式

    MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它强制性地把应用程序的数据展示.数据处理和流程控制分开.MVC把应用程序分成3个核心模块:模型.视 ...

  5. JavaWeb:MVC设计模式

    1. MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controll ...

  6. Java设计模式(十四):MVC设计模式

    1. 应用场景 MVC设计模式广泛应用于桌面应用程序开发和网页页面开发这些与用户交互的应用场景中. 2.概念 众所周知MVC不是设计模式,是一个比设计模式更大一点的模式,称作设计模式不合理,应该说MV ...

  7. iOS中MVC设计模式

    在组织大型项目的代码文件时,我们常用MVC的思想.MVC的概念讲起来非常简单,就和对象(object)一样.但是理解和应用起来却非常困难.今天我们就简单总结一下MVC设计理念. MVC(Model V ...

  8. Java-Web JSTL标签库、自定义标签库和MVC设计模式

    目录 一.JSTL标签库 1.什么是JSTL 2.JSTL标签库 3.使用taglib指令导入标签库 4.core标签库常用标签 (1)out和set (2)remove (3)url (4)if ( ...

  9. 数据库相关(JDBC,存储过程,以及大文本数据处理,mvc设计模式)

    目录 1.jdbc总结(模板.八股文): 2.CallableStatement:调用 存储过程.存储函数 3.1JDBC调用存储过程的步骤: 3.2调存储函数: 3.处理CLOB/BLOB类型 4. ...

  10. jsp 将页面中的值导入java中_JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC 设计模式

    JSP 的概述 概念 JSP 是 Java Server Pages 的简称,跟 Servlet 一样可以动态生成 HTML 响应, JSP 文件命名为 xxx.jsp. 与 Servlet 不同,J ...

最新文章

  1. Oracle的Java模块化系统保卫战
  2. sql sever avg保留小数_《数据库系统概念》笔记 (一)SQL
  3. python字典添加主键_python 字典相关操作
  4. SpringBoot响应Json数据乱码通过配置解决
  5. noi.ac NA535 【生成树】
  6. uda 3.C++二维向量
  7. C++获取本机的ip地址程序
  8. Pipelines - .NET中的新IO API指引(一)
  9. java学习(85):Interage包装类基本使用
  10. 乐观锁 VS 悲观锁(简述)
  11. mac应用 已损坏,打不开.你应该将它移到废纸篓
  12. Oracle 查看表空间使用率,表空间扩展
  13. 小米电视怎么外接电视盒子?具体操作如下
  14. 最全牛人博客,你可以学习到太多太多
  15. Python宜昌房源数据获取与分析
  16. 和求余运算巧妙结合的jns指令
  17. 免费wifi帮助文档
  18. 自建Ceph存储与 AWS、阿里云、腾讯云的成本对比
  19. 基于时域表示的序列数据分类方法(一)——基于距离度量的序列数据分类方法
  20. AC自动机模板(【CJOJ1435】)

热门文章

  1. 【shadertoy】线性动态模糊的实现 Analytical Motion Blur
  2. JAVA的向上转型与向下转型(二)
  3. js判断是否为数字的几种方式
  4. 枚举类型的理解和应用
  5. C语言必背经典程序代码
  6. 金蝶EAS,查询分析器,分页查询,获取6500行之后的记录
  7. python 均差表 差商表 数值分析
  8. KindEditor图片上传路径URL的处理
  9. Nginx启动不了报错未找到命令的解决方法(- bash: nginx: 未找到命令)
  10. CSS的小特效之:融合效果