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浏览器(操 ...
随机推荐
- centos6 内核优化
以下为部分优化参数,具体优化方法还要看情况而定 [root@localhost ~]# vi /etc/sysctl.conf #末尾添加如下参数 net.ipv4.tcp_syncookie ...
- 201521123053《Java设计与程序》第六周学习总结
---恢复内容结束--- 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但 ...
- 201521123101 《Java程序设计》第5周学习总结
1. 本周学习总结 2. 书面作业 1. 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 不能 ...
- 201521123071《Java程序设计》第五周学习总结
第5周作业-继承.多态.抽象类与接口 1. 本周学习总结 1.1 思维导图总结: 1.2在本周的学习中,主要学习了以下几点: - 初步接触了接口的定义,用interface关键字定义接口,使用impl ...
- 201521123020《Java程序设计》第2周学习总结
一.学习总结 学习了运算符的基本使用方法: 学习了string这个特殊的类型: 学习了数组的使用方法. 二.书面作业 1.使用Eclipse关联jdk源代码,并查看String对象的源代码(截图)? ...
- 201521123093 java 第十三周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- 201521123032 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- JAVA课程设计 刘舒婷 201521123096
1.团队课程设计博客链接 2.个人负责模块说明 2.1 界面菜单的设计: 2.2 录入学生信息: 2.3 对已录入的学生信息进行修改: 3.个人代码提交记录截图 4.自己负责模块或任务详细说明 4.1 ...
- [LeetCode] 231 Power of Two && 326 Power of Three && 342 Power of Four
这三道题目都是一个意思,就是判断一个数是否为2/3/4的幂,这几道题里面有通用的方法,也有各自的方法,我会分别讨论讨论. 原题地址:231 Power of Two:https://leetcode. ...
- 《HiBlogs》重写笔记[1]--从DbContext到依赖注入再到自动注入
本篇文章主要分析DbContext的线程内唯一,然后ASP.NET Core的注入,再到实现自动注入. DbContext为什么要线程内唯一(非线程安全) 我们在使用EF的时候,可能使用相关框架封装过 ...