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浏览器(操 ...
随机推荐
- 转:【深入Java虚拟机】之五:多态性实现机制——静态分派与动态分派
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17965867 方法解析 Class文件的编译过程中不包含传统编译中的连接步骤,一切方法 ...
- 第六次meeting会议
[Beta] 第六次Daily Scrum Meeting 一.本次会议为第六次meeting会议 二.时间:10:00AM-10:20AM 地点:禹州楼 三.会议站立式照片 四.今日任务安排 成员 ...
- 团队作业4——第一次项目冲刺 tHiRd DaY
项目冲刺--Triple Kill 小编又来了,好困呐,上了一天的课还要写博客,为什么写博客的一直是我呢..一点乐子都没有*-* 但是我还是得写啊[我也很无奈啊],那就让我给大家找点乐子吧 天霸动霸. ...
- 201521123066《Java程序设计》第七周学习总结
第7周-集合 本周学习总结 其他注意点: (1)List主要特征: 其元素以线性方式存储 集合中允许存放重复对象 (2)Set中的对象: 不按特定方式排序 没有重复对象 Set最多有一个null元素 ...
- 201521123003《Java程序设计》第4周学习总结
1. 本章学习总结 你对于本章知识的学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 参考资料: 百度脑图 XMind 1.2 使用常规方法总结其他上课内容. (1)了解了类型转换(cast) ...
- 201521123110《Java程序设计》第14周学习总结
1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 2. 使用JDBC连接数据库与Statement 2.1 使用Statement操作数据库.(粘贴一段你认为比较有价值的代码,出现学 ...
- 201521123087 《Java程序设计》第9周学习总结
1. 本周学习总结 2. 书 面作业 本次PTA作业题集异常 常用异常题目5-11.1 截图你的提交结果(出现学号)1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? ...
- Shiro第五篇【授权过滤、注解、JSP标签方式、与ehcache整合】
授权过滤器测试 我们的授权过滤器使用的是permissionsAuthorizationFilter来进行拦截.我们可以在application-shiro中配置filter规则 <!--商品查 ...
- 通过Xshell登录远程服务器实时查看log日志
主要想总结以下几点: 1.如何使用生成密钥的方式来登录Xshell连接远端服务器 2.在远程服务器上如何上传和下载文件(下载log文件到本地) 3.如何实时查看log,提取错误信息 一. 使用生成密 ...
- 检测Linux硬盘IO数据
首先安装sysstat(有些系统会预装): apt install sysstat 然后使用命令: iostat -x -k 2 x选项用于显示和io有关的扩展数据 k某些使用block为单位的字段改 ...