上海尚学堂警句:一份信心,一份努力,一份成功;十分信心,十分努力,十分成功。

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和三层架构的更多相关文章

  1. JAVAEE企业级应用开发浅谈第一辑

    不积跬步无以至千里,不积小流无以成江海 Step1.情景概要 作为一个JAVA WEB 开发人员,在开发web 项目时项目大家都有自己的一些新的体会,对于web 开发出现的一些比较经典的名词大家都会有 ...

  2. JAVAEE企业级应用开发浅谈之MVC 中的V-VIEW视图

    Step1.情景概要 Hello,小伙伴们,好久不见,之前跟大家分享了三层架构与MVC思想,相信大家对于这两块内容有了相对清晰的个人认识了,既然我们讲到了MVC,这里我们接着这块内容继续往下深入,今天 ...

  3. Android开发-浅谈架构(二)

    写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...

  4. Python测试开发-浅谈如何自动化生成测试脚本

    Python测试开发-浅谈如何自动化生成测试脚本 原创: fin  测试开发社区  前天 阅读文本大概需要 6.66 分钟. 一 .接口列表展示,并选择 在右边,点击选择要关联的接口,区分是否要登录, ...

  5. 【ASP.NET MVC系列】浅谈ASP.NET MVC 路由

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  6. 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  7. 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  8. 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  9. 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)

    lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...

随机推荐

  1. 提高SQL执行效率的16种方法

      项目中优化sql语句执行效率的方法:1)尽量选择较小的列2)将where中用的比较频繁的字段建立索引3)select子句中避免使用'*'4)避免在索引列上使用计算.not in 和<> ...

  2. 第07周-集合与GUI

    1. 本周作业简评与建议 本周8分以上的同学有32人(占1/4),其中9分以上的同学有13人(占1/10).大作业未完成的最高评分一般高于6分.被认定为抄袭的为-10分.请大家认真完成大作业,后面每周 ...

  3. 团队作业4——第一次项目冲刺(Alpha版本)4th day

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 计时功能已经完成,然后24点的代码如何在游戏界面与界面组件联系上正在进行. 四.困难与问题 1.在安卓框架与java代码的结合 ...

  4. 201521123032《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 参考资料: 百度脑图 XMind 2. 书面作业 作业参考文件下载 1. 代码阅 ...

  5. 201521123113 《Java程序设计》第3周学习总结

    1. 本周学习总结 2.书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...

  6. 201521123108《Java程序设计》第1周学习总结

    本周学习总结 刚加入java的学习,我感觉很困难.但我觉得学习并不是一蹴而就.只要我多读,多看,多练,一定会取得进步.有空的时候把书本上的代码敲一敲.相信会有回报. 2.书面作业 1.为什么java程 ...

  7. 201521123055 《Java程序设计》第9周学习总结

    1. 本章学习总结 2. 书面作业 Q.1常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 1.3 什么样的 ...

  8. Java课程设计-计算器

    1.团队课程设计博客链接 http://www.cnblogs.com/yuanj/p/7072137.html 2.个人负责模块或任务说明 监听器的设置 3.自己的代码提交记录截图 //注册各个组件 ...

  9. Junit4学习(一)新建Junit4工程

    一,学习Junit4,学以致用 二,熟悉编写流程 工具:Eclipse,Junit包,hamcrest.core包 1,打开Eclipse开发工具,新建工程:file->Java Project ...

  10. 笔记1 linux 多线程 互斥锁

    //mutex lock #include<stdio.h> #include<unistd.h> #include<pthread.h> struct test ...