随着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. AngularJS_01之基础概述、设计原则及MVC设计模式

    1.AngularJS: 开源的JS框架,用来开发单一页面应用,以及数据操作频繁的场景:2.设计原则: ①YAGNI原则:You Aren't Gonna Need It! 不要写不需要的代码! ②K ...

  2. 谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式

    作为一名java工程狮,大家肯定经历过很多面试,但每次几乎都会被问到什么是MVC设计模式,你是怎么理解MVC的类似这样的一系列关于MVC的问题. [出现频率] [关键考点] MVC的含义 MVC的结构 ...

  3. Java Web开发中MVC设计模式简介

    一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条 ...

  4. MVC设计模式与三层架构

    三层架构分别是:表示层(Web层).业务逻辑层(BLL层)和数据访问层(DAL层). (1)表示层负责: a.从用户端收集信息 b.将用户信息发送到业务服务层做处理 c.从业务服务层接收处理结果 d. ...

  5. 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销

    第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...

  6. mvc设计模式和mvc框架的区别

    Spring中的新名称也太多了吧!IOC/DI/MVC/AOP/DAO/ORM... 对于刚刚接触spring的我来说确实晕了头!可是一但你完全掌握了一个概念,那么它就会死心塌地的为你服务了.这可比女 ...

  7. MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)

    设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计 ...

  8. MVC设计模式(持续更新中)

    MVC设计模式--->英文全称为: model(模型)  View (视图)  Controller(控制)   MVC是一种设计思想.这种思想强调实现模型(Model).视图(View)和控制 ...

  9. iOS中MVC设计模式

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

  10. java MVC设计模式

    MVC(Model View Control)模型-视图-控制器 一.MVC与模板概念的理解 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是 ...

随机推荐

  1. .net学习之.net和C#关系、运行过程、数据类型、类型转换、值类型和引用类型、数组以及方法参数等

    1..net 和 C# 的关系.net 是一个平台,C#是种语言,C#语言可以通过.net平台来编写.部署.运行.net应用程序,C#通过.net平台开发.net应用程序2..net平台的重要组成FC ...

  2. Query通过Ajax向PHP服务端发送请求并返回JSON数据

    Query通过Ajax向PHP服务端发送请求并返回JSON数据 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据.本文将通过实例演示了jQuer ...

  3. 编辑WCF配置不出现

    在使用VS2010创建

  4. cocos2dx游戏开发——微信打飞机学习笔记(九)——BulletLayer的搭建

    一.创建文件~ BulletLayer.h BulletLayer.cpp 二.How to do? (1)实例化BulletLayer方法的实现~ Bullet(PlayerLayer* temp) ...

  5. javascript优化--03高质量编码

    使用Object的直接量实例构造轻量级的字典: 使用for/in循环,使用对象字面量来构建,并确保不增加Object.prototype属性来导致for/in循环:(考虑到兼容性,如Array.pro ...

  6. HDU1561 The more, The Better(树形DP)

    题目是有n个存有宝藏的城堡,攻克任何一个城堡都需要先攻克0个或其他1个城堡,问攻克m个城堡最多能得到多少宝藏. 题目给的城堡形成一个森林,添加一个超级根把森林连在一起就是树了,那么就考虑用树型DP: ...

  7. 奇妙的旅行[XDU1012]

    Problem 1012 - 奇妙的旅行 Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty: Total Submit: 396  Acc ...

  8. Treap和名次树

    Treap名字的来源:Tree+Heap,正如名字一样,就是一颗简单的BST,一坨堆的合体.BST的不平衡的根本原因在于基于左<=根<=右的模式吃单调序列时候会无脑成长链,而Treap则添 ...

  9. POJ 2763 (树链剖分+边修改+边查询)

    题目链接:http://poj.org/problem?id=2763 题目大意:某人初始在s点.有q次移动,每次移动沿着树上一条链,每经过一条边有一定花费,这个花费可以任意修改.问每次移动的花费. ...

  10. [Coursera]Machine Learning

    有用的链接: http://blog.csdn.net/yunlong34574/article/details/8851942