JAVAEE企业级应用开发浅谈第二辑:MVC和三层架构
上海尚学堂警句:一份信心,一份努力,一份成功;十分信心,十分努力,十分成功。
Step1.情景概要
Hello,小伙伴们,昨天跟大家分享了JAVA EE 企业级应用开发中大家耳熟能详的概念-三层架构,那么有的小伙伴可能就会有疑问了,这种代码书写方式我每天写这些web 项目时都是在采用该方式呢,那跟我们所接触的MVC 有啥区别呢,借着这样的疑问,我们今天聊聊我们程序员们在开发时经常提到的MVC。
Step2.问题浅析
在开发中,我们可能总是不经意间就将三层架构与Mvc混为一谈,殊不知它俩并不是一个概念。下面我来为大家揭晓我所理解的一些“真相”。
三层架构: 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。
MVC:全名是Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
哈哈,看过概念感觉有点晕晕的,那具体该怎么去理解它呢?
Step3.回归代码
在步骤二中对于三层架构与MVC 的概念性问题做了一个解释,当然对于我们程序员来说概念神马都是浮云,只有代码才是我们的钟爱,接下来我们来具体来看看通过代码怎么去理解两者区别。同样还是借助我们昨天的用户登录场景来分析。
在没有分层的情况下,也没有MVC概念的前提下,我们想要通过服务器端给浏览器响应一个登录页面,对于java 程序员来说,我们看到的代码会是如下形式:


而对于登录的具体代码处理,思路首先是这样的:
结合思路,具体代码实现,我们看到的代码将会是这样的:
参数获取与非空处理:
Jdbc 操作 查询用户记录:
登录结果响应到客户端:
略略看来,这些代码是神马?好像回到了”原始时代”。。。
以上代码实际上已经实现了一个简单的用户登录功能,但是跟我们平时所写的代码还是有较大差距的,具体差距在哪呢。
分析以上代码,对于代码的书写方式上第一我们没有采用三层架构方式对代码进行解耦操作,带来的问题就是servlet 中代码相当臃肿,不放采用我们的三层架构来对代码进行分层处理,处理后的代码会是下面这样的:
Dal(Data Access Layer) 数据访问层即我们通常所说的Dao 层:


Bll(Business Logic Layer)业务逻辑处理层 即我们通常所说的Service 层:
Ui(User Interface layer) 界面层 即 我们这里用到的jsp+servlet
登录页面:

登录成功欢迎页面:

至此,一个简单的登录功能代码重构完毕,此时登录的代码看起来已经跟我们平时所写的功能代码很相似,可能在业务处理上没有项企业项目中那样业务比较多,这里我们拿最简单的为例,思想理解了,哈哈,其它什么业务代码对于我们程序员来说都是浮云而已。
Step4 代码分析与总结
通过以上代码分析,我们可以看到,登录功能实现中既有三层架构的处理,又有MVC 的影子,那这个该具体如何进一步理解这两则关系呢,哈哈,事已至此,我们来做个简单梳理:
三层架构将整个项目划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
MVC 即Model(模型),View(视图),Controller(控制)。
具体关系图如下:
1.二者都是“三层”。
虽然都是“三层”(不一定是真的三层,还可以是多层),但是它们的划分的不一样。大家可从上面的图中看出不同。
2.MVC总是伴随着三层架构,但三层不一定伴随Mvc
虽说都是三层,两则侧重点还是不同的, 三层架构的目的着重点是“高内聚,低耦合”,即解耦。MVC的目的则是实现Web系统的职能分工,即职责划分。三层是基于业务逻辑来分的,而mvc是基于页面来分的。MVC主要用于表现层,三层主要用于体系架构,三层一般是表现层、中间层、数据层,其中表现层又可以分成M、V、C,(Model View Controller)模型-视图-控制器,同时对于三层架构来说,不仅仅使用web 项目,对于其它形式的项目同样是适用的。
哈哈,写到这,相信大家对三层架构,Mvc 有了相对深刻的认识,好了,今天的分享就先到这,明天我们继续来聊。欢迎继续关注上海尚学堂java。
JAVAEE企业级应用开发浅谈第二辑:MVC和三层架构的更多相关文章
- JAVAEE企业级应用开发浅谈第一辑
不积跬步无以至千里,不积小流无以成江海 Step1.情景概要 作为一个JAVA WEB 开发人员,在开发web 项目时项目大家都有自己的一些新的体会,对于web 开发出现的一些比较经典的名词大家都会有 ...
- JAVAEE企业级应用开发浅谈之MVC 中的V-VIEW视图
Step1.情景概要 Hello,小伙伴们,好久不见,之前跟大家分享了三层架构与MVC思想,相信大家对于这两块内容有了相对清晰的个人认识了,既然我们讲到了MVC,这里我们接着这块内容继续往下深入,今天 ...
- Android开发-浅谈架构(二)
写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...
- Python测试开发-浅谈如何自动化生成测试脚本
Python测试开发-浅谈如何自动化生成测试脚本 原创: fin 测试开发社区 前天 阅读文本大概需要 6.66 分钟. 一 .接口列表展示,并选择 在右边,点击选择要关联的接口,区分是否要登录, ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 路由
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)
lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...
随机推荐
- 团队作业7——Alpha冲刺之事后诸葛亮(宣告项目失败团队解散)
一.项目进度 1.4月5日,团队组建.满怀希望的能做好这个项目 2.4月12日,需求分析. 3.4月21日,需求改进,出现协作问题,没有做好. 4.做项目,学习新的知识,继续做项目,但是能力有限,团队 ...
- Python的变量参数
- JavaSE集合(十)之Map
前面给大家介绍了集合家族中的Collection家族,这一篇给大家分享的是集合中的另一个家族就是Map家族.以前的时候学习Map的时候没有很认真的去学习,我觉得很多东西还是不是很清楚. 这次我将总结的 ...
- Map.containsKey方法——判断Map集合对象中是否包含指定的键名
该方法判断Map集合对象中是否包含指定的键名.如果Map集合中包含指定的键名,则返回true,否则返回false. public static void main(String[] args) { M ...
- 再起航,我的学习笔记之JavaScript设计模式23(中介者模式)
中介者模式 概念介绍 中介者模式(Mediator):通过中介者对象封装一系列对象之间的交互,使对象之间不再相互引用降低他们之间的耦合,有时中介者对象也可以改变对象之间的交互. 创建一个中介 中介者模 ...
- Js前端传递json数组至服务器端并解析的实现。
最近做的一个小项目中需要将json数组数据传递到服务器端进行保存,现分享一下解决思路. 环境:EasyUi+Mvc 4.0 如下: 在上述截图中的红色圈起来的部分,需要在点击保存后通过一次ajax请求 ...
- SimpleRpc-系统边界以及整体架构
系统边界 什么是系统边界?系统边界就是在系统设计之初,对系统所要实现的功能进行界定,不乱添加,不多添加.这么做的好处就是,系统简单明了,主旨明确,方便开发和用户使用.举个例子,一个自动售货机的本职工作 ...
- Linux Ubuntu从零开始部署web环境及项目 -----部署项目 (三)
上一篇讲了如何在linux搭建web环境,这边将如何部署项目. 1,打包项目包 2,上传项目包 将.war项目包通过xftp上传到tomcat目录wabapps目录下 3,启动项目 通过xshell命 ...
- SpringBoot开发案例之mail中文附件乱码
前一段时间做过一个邮件发送的服务,以前大体都测试过,文本.图片.附件都是没有问题的,可有同事反应发送的附件名称有中文乱码,类似如下截图展示: 咋一看不像乱码,抱着试试看的态度,为MimeMessage ...
- js的严格模式详解
什么是js的严格模式? 严格模式指的是使js在更为严格的条件下运行.严格模式的主要作用是规范我们写代码习惯,以及为js升级做好铺垫. 如何使用严格模式? <script> //直接在代码 ...