MVC架构系统设计方法(mvc架构模式的原理)
说起MVC,感觉大家都能唠个两块钱的。今天呢,我们也来简单的聊一聊,并以Java Web开发为例,简单的讲解项目应当如何分层。
MVC之前
在Web开发早期,当Sun公司推出了JSP技术后,在当时是极大的震撼了整个行业,包括微软后面推出的ASP也是针对JSP推出的反制手段。在早期使用JSP开发的Web应用中,JSP因为其强大的特性,以Java语言写的代码块作为脚本,因此一个JSP文件是一个独立的、能自主完成所有任务的模块(其他的动态网站技术比如ASP、PHP也是如此),它可以负责处理业务逻辑、控制页面跳转和向用户展示页面等。
在上图这个模式中,”全栈”开发似乎变得简单了许多,只需要在JSP中开发就可以了。但这么做的一个明显的弊端,就是JSP页面中的功能过于繁杂、耦合性太高,数据、业务逻辑、流程控制全都混杂在一起,使得程序后续难以维护和修改。
为了解决上述问题,SUN公司提供了一种JSP开发的架构模型,我们可以称之为JSP Model1。在这个模型中,采用JSP+JavaBean(将万物抽象成对象,提供一些属性和对应的getter、setter方法)技术,将页面的显示和业务逻辑分开。
从上图中,我们可以看到,JSP Model1将封装数据和处理数据的业务逻辑交给了JavaBean组件,JSP只负责接收用户的请求和调用JavaBean组件来响应用户的请求。这种设计在一定程度上实现了数据、业务逻辑、页面展示的分离,在一定程度上实现了程序开发的模块化(分层),降低了程序间的耦合性,让代码的维护、修改成本有效的降低。
MVC设计模式
MVC设计是由[Xerox PARC](
https://baike.baidu.com/item/Xerox PARC)(施乐帕克,研究中心)在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,提供了一种按照功能模块划分的指导思想。
MVC设计模式将应用程序分为三个核心模块:模型(Model)、视图(View)、控制器(Controller)。每个模块的作用如下所示:
- 模型(Model):负责管理应用程序的业务数据、定义访问控制以及修改这些数据的方法。
- 视图(View):负责与用户进行交互,它从模型中获取数据向用户展示,同时也能将用户请求传递给控制器处理。
- 控制器(Controller):负责应用程序中处理用户交互的部分,可以从视图中取数据,控制用户输入,并向模型发送数据。
MVC模式广泛的应用的于Web开发中,我们以Java Web开发来简单说明应用程序应该怎么样划分模块:Controller层为Servlet,View层为JSP,Model层为JavaBean。图中的步骤1、2、3、4是用户进行请求时的处理流程。
三层架构
三层架构(3-tier architecture)通常是将整个业务应用划分为:表示层(User show layer, USL)、业务逻辑层(Business Logic Layer, BLL)、数据访问层(Data access layer, DAL)。其中每层的作用如下:
表示层:又称表现层UI,位于三层构架的最上层,与用户直接接触,主要是用户浏览的页面,其主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到BLL系统中进行数据处理,处理后会将处理结果反馈到表示层中;
业务逻辑层:中间层,对具体问题进行逻辑判断与执行操作,当接收到表现层UI的用户指令后,会连接数据访问层,将数据库访问层的增删改查进行组装,并将处理结果返回给表示层;
数据库访问层:主要用于操作数据库中的数据,实现数据的增删改查操作,并将处理结果返回给业务逻辑层。
三层架构相比较于MVC是更宏观的解决方案,MVC相当于对三层架构中的表示层。不管这两个的哪一种,都是对应用程序进行分层,其目的就是实现高内聚、低耦合的目标,将程序分成不同的模块,让开发和维护变得更清晰明了。
项目分层
这里给大家推荐《阿里巴巴Java开发手册》中工程结构里约定的应用分层。
图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web 层,也可以直接依赖于 Service 层,依此类推。每个层的定义我们简单看下:
终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染,JSP 渲染,移动端展示等;
开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行网关安全控制、流量控制等;
- Web层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等;
- Service层:相对具体的业务逻辑服务层;
- Manager层:通用业务处理层;
1) 对第三方平台封装的层,预处理返回结果及转化异常信息;
2) 对 Service 层通用能力的下沉,如缓存方案、中间件通用处理;
3) 与 DAO 层交互,对多个 DAO 的组合复用;
- DAO层:数据访问层,与底层 MySQL、Oracle、Hbase 等进行数据交互。
- 外部接口或第三方平台:包括其它部门 RPC 开放接口,基础平台,其它公司的 HTTP 接口。
在我们的实际项目中,一般是不需要设置web层和manager层的,除非业务特别复杂。因此推荐项目分层如下:
总结
其实许多同学可能会有些疑惑,由于ajax的出现许多项目现在开始实行前后端分离的做法,尤其是现在优秀的前端框架层出不穷,比如Vue、React、AngularJS等,似乎三层架构和我们上面的推荐的分层就不适用了。其实不是这样的,我们将页面划分为终端显示层,无论项目是否是前后端分离,我们都可以将我们的Java代码划分为Controller+services+dao+util+model。
文章到这也就结束了,希望本文对你有所帮助,也希望我们的项目都可以结构清晰,可以使用分层的方式降低代码之间的耦合性,让代码更容易被维护和修改。
推荐阅读
-
洗衣机不脱水了是怎么回事(洗衣机不甩干的处理方法)
洗衣机作为大家日常生活必备的家用电器,其利用率频繁,难免会因为机械磨损、缺乏润滑油、机件老化、弹簧疲劳变形等原因,出现各种不正...
-
电子表格零基础自学教程(小白也能学明白)
可能很多人(包括我)觉得Excel不就是做个表吗,没什么好学的。然而很多大型企业在面试的时候还是会问,“会Excel吗?”“会...
-
笔记本电脑报价大全(联想笔记本多少钱)
(注意:建议在旗舰店、官方旗舰店、官网购买) 一、游戏本设计本、办公本推荐如下: 华为品牌:(全球第一大电信设备商) 1...
-
煲机软件哪个好(让耳机有个思想准备)
《无间道》中陈永仁与刘建明有过一句经典对白——“高音甜、中音准、低音沉,总之一个词通透”。这一句话也一...
-
viewsonic平板电脑(viewsonic平板电脑刷机)
ViewSonic是一个视讯品牌,中文名字:优派。 ViewSonic 一、读音:英[vju:][?s?n?k],美[vj...
-
采访麦克风户外哪款好(讯飞智能无线麦克风C1采访神器)
对于视频创作者、直播工作者、远程培训老师、记者等媒体工作者来说,工作过程中,最让人费心的莫过于如何确保收音纯正、字幕快速生成、...
-
电脑硬件配置怎么查(详述两招快速查看电脑配置参数信息)
大家好,今天跟大家分享两个快速查看电脑配置参数信息的办法。 操作步骤如下: 1右击电脑屏幕最下方任务栏左侧的电脑徽标按钮,...
-
数据线没坏但充不上电怎么办(数据线充不上电处理方法)
苹果充电器突然充不上电是比较尴尬的问题,首先看自己的充电器数据线是不是原装,如果非原装在第一次充电时,苹果手机会提示你是否要适...
-
电脑开机出现黑屏如何处理(电脑不能开机黑屏解决方法)
电脑不能开机或者开机以后黑屏怎么解决?这里收集了所有常见的维修方法,看完秒变维修高手,实在是一篇不能错过的电脑维修教程。简单易...
-
手机宝典怎么搞(小米手机性能优化宝典)
别再总是抱怨手机卡顿,系统臃肿,反应慢,现在看完这篇文章,你会发现你并不了解小米手机,当然,文中许多方法并不是仅仅适用于小米手...