文档章节

三层架构和MVC模式

_
 _Roger_
发布于 2015/10/21 11:20
字数 1207
阅读 2695
收藏 10
点赞 1
评论 1

1、三层架构

三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。

1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 

2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 

3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。 


    表现层实现的代表作品是Struts框架,业务层实现的代表作品是Spring,持久层实现的代表作品是Hibernate。 

举个例子:

持久层从持久库中取出-10。

业务层按照一定的逻辑(这里我们举例取温度的逻辑)翻译成-10摄氏度。

表示层显现给用户“哎呀,今天好冷!”。

层就相当于一个黑盒子,我们不用知道它内部怎么实现,只需要知道如何去调用它就行了。每层只与上下相邻的两层打交道。当一层内部由于技术变迁发生变化时,只要接口不变,其他层不用做任何改变。分层之后灵活性提高,也便于团队分工开发。


2、MVC

2.1 标准的MVC(Model-View-Controller)

这里写图片描述

  • Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型(domain)或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。

  • View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。

  • Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作。

  从图中我们还看到,在标准的MVC中模型能主动推数据给视图进行更新(观察者设计模式,在模型上注册视图,当模型更新时自动更新视图),但在Web开发中模型是无法主动推给视图(无法主动更新用户界面),因为在Web开发是请求-响应模型。

2.2 Web MVC

Web MVC中的M(模型)-V(视图)-C(控制器)概念和标准MVC概念一样,我们再看一下Web MVC标准架构,如下图所示:

这里写图片描述

在Web MVC模式下,模型无法主动推数据给视图,如果用户想要视图更新,需要再发送一次请求(即请求-响应模型)。


M:(Model)  模型  :  应用程序的核心功能,管理这个模块中用的数据和值;

V(View )视图:   视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观;

C(Controller)控制器: 对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。

MVC用于将web(UI)层进行职责解耦


3、三层架构和MVC的区别与联系

    MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。


MVC可以是三层中的一个表现层框架,属于表现层。三层和mvc可以共存。

三层是基于业务逻辑来分的,而MVC是基于页面来分的。

MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以分成M、V、C,(Model View Controller)模型-视图-控制器 


MVC是表现模式(Presentation Pattern)

三层架构是典型的架构模式(Architecture Pattern)

三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC作为表现模式是不存在上下关系的,而是相互协作关系。即使将MVC当作架构模式,也不是分层模式。MVC和三层架构基本没有可比性,是应用于不同领域的技术。




© 著作权归作者所有

共有 人打赏支持
_
粉丝 29
博文 82
码字总数 39915
作品 0
武汉
加载中

评论(1)

李嘉图
李嘉图
三层架构是把BLL(业务逻辑层)和DAL(数据访问层)细分了,MVC是吧BLL和DAL合成了Model,但又把三层架构的UI细分成了View和Controller,三者都表现出了关注点分离,细分表标准却各有所侧重吧?
MVC与三层架构的区别

我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念。下面我来为大家揭晓我所知道的一些真相。 首先,它俩根本不是一个概念。   三层架构是一个分层式的软件体系架构设计,它...

xiaml ⋅ 2014/06/01 ⋅ 3

mvc与三层结构终极区别

注:本文章内所有内容都来自互联网,本人主要是起了一个收集的作用 http://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条...

长平狐 ⋅ 2012/11/12 ⋅ 0

浅谈MVC与三层架构

首先给大家引入下MVC的概念: MVC(Model View Controller)模型、视图以及控制器,它是一种较为广泛应用的结构设计模式。 模型:就是在MVC设计模式中需要被显示的数据。在通常情况下,该模型...

邵鸿鑫 ⋅ 2014/11/30 ⋅ 0

浅谈MVC、ASP.NETMVC和三层架构的区别

MVC 目前流行的软件设计模式,对于WEB应用程序开发是一种非常先进的思想。MVC就是model-view-contrller的简写,是把一个应用的输入处理输出流程按照m-v-c的方式进行编程。 V-视 图:代表用户...

跃月 ⋅ 2013/03/16 ⋅ 0

JavaEE软件开发体系架构

前言 上篇文章小编提到了什么是javaEE和它的13个核心规范,本篇文章,小编带您走进JavaEE的体系结构,从两层架构,三层架构,MVC,基于JavaEE架构模式下的MVC,JavaEE的四层架构。 两层架构 ...

weienjun ⋅ 2017/12/24 ⋅ 0

谈谈MVC模式

如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论。 MVC模式就是架构模式的一种,它对我的启发特别大。我觉得它不仅适用于开发软件...

monroeCode ⋅ 2016/12/26 ⋅ 0

谈谈MVC模式

1. 如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论。 MVC模式就是架构模式的一种,它对我的启发特别大。我觉得它不仅适用于开发软...

阮一峰 ⋅ 2007/11/08 ⋅ 0

《Pro ASP.NET MVC 3 Framework》学习笔记之三【MVC模式介绍】

主题:MVC模式 1.MVC的历史: MVC(model-view-controller)这个概念在20世纪70年代就已经被使用了,MVC是从Smalltalk项目中提出的。所以原始的MVC模式所包含非常好的细节跟Smalltalk项目的具体...

mszhangxuefei ⋅ 2011/12/03 ⋅ 0

(JavaEE-09)JSP中的MVC与三层架构

JSP开发模式 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式 JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用...

_-Leon-_ ⋅ 2014/07/11 ⋅ 2

mvc 架构 和三层的关系

老说mvc 框架 和三层,有什么关系?一个架构我都不知道哪里体现了mvc架构模式,对这些基础概念没有深刻的了解,都快弄混了

琴麻岛 ⋅ 2014/01/08 ⋅ 8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 文档

https://istio.io/docs/concepts/ https://istio.io/docs/concepts/traffic-management/handling-failures/ https://istio.io/docs/concepts/traffic-management/rules-configuration/......

xiaomin0322 ⋅ 20分钟前 ⋅ 0

编程语言的作用及与操作系统和硬件的关系

一、编程语言的作用及与操作系统和硬件的关系 作用:编程语言是计算机语言,是一种程序员与计算机之间沟通的介质,通过编程语言可以使得计算机能够根据人的指令一步一步去工作,完成某种特定...

slagga ⋅ 30分钟前 ⋅ 0

runtime实现按钮点击事件

也不能说是实现吧,,,就是有点类似于RAC里边的写法,不用给btn添加另外的点击事件,就那个add...select...这样子很不友好,来看下代码: [self.btn handleControlEvent:UIControlEventTou...

RainOrz ⋅ 31分钟前 ⋅ 0

Windows系统运维转linux系统运维的经历

开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维。最近,在《Linux就该这么学》书籍的影响下和朋友小A(Linux运维已经三年了,工资也比我的高很多)的影响下,决定转行。最近...

linux-tao ⋅ 31分钟前 ⋅ 0

zip压缩工具,tar打包工具

zip压缩工具 zip打包工具跟前面说到的gzip,bz2,xz 工具最大的不一样是zip可以压缩目录。如果没有安装,需要使用yum install -y zip 来安装。安装完之后就可以直接使用了,跟之前提到的压缩...

李超小牛子 ⋅ 39分钟前 ⋅ 0

使用npm发布自己的npm组件包

一、注册npm账号 官网:https://www.npmjs.com/signup 注册之后需要进行邮箱验证,否则后面进行组件包发布时候会提示403错误,让进行邮箱核准。 二、本地新建一个文件夹,cd进入后使用npm i...

灰白发 ⋅ 41分钟前 ⋅ 0

010. 深入JVM学习—垃圾收集策略概览

1. 新生代可用GC策略 1. 串行GC(Serial Copying) 算法:复制(Copying)清理算法; 操作步骤: 扫描年轻代中所有存活的对象; 使用Minor GC进行垃圾回收,同时将存活对象保存到“S0”或“S...

影狼 ⋅ 42分钟前 ⋅ 0

JVM性能调优实践——JVM篇

在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性...

Java小铺 ⋅ 43分钟前 ⋅ 0

误关了gitlab sign-in 功能的恢复记录

本想关sign-up的,误点了sign-in 退出后登录界面提示: No authentication methods configured 一脸懵逼.. 百度后众多方案说修改application_settings 的 signin_enabled字段; 实际上新版本字段...

铂金蛋蛋 ⋅ 43分钟前 ⋅ 0

登录后,后续请求接口没有带登录cookie可能原因

1.XMLHttpRequest.withCredentials没设置好,参考https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials...

LM_Mike ⋅ 44分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部