MVC与三层架构理解
文章目录
- 1. JSP的发展
- 2. MVC思想
- 优缺点
- 3. 三层架构
- 为什么使用三层
- 三层优缺点
- 4. MVC与三层架构的区别
1. JSP的发展
早期只有Servlet,只能使用response输出标签数据,非常麻烦后来。JSP的出现,简化了 Servlet的开发。但是过度的使用JSP,在JSP中写大量的java代码,又前端的页面,造成难以维护,难于分工协作的窘境。
再后来,随着java的web开发的逐步完善,公司的开发需要形成一种规范,来更好的管理和维护代码,借鉴MVC
的开发模式,使得程序的设计更加合理性。
JSP(全称JavaServer Pages)是由Sun公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。
JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
百度百科复制来的哈!!
2. MVC思想
MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
MVC每层之间的逻辑关系:
M:Model,模型。 JavaBean
- 完成具体的业务操作,如:查询数据库,封装对象
V:view视图。JSP、HTML等来进行数据展示
C:Controller控制器。 Servlet
获取View的请求
调用模型将数据交给视图进行展示
控制器Controller
的作用就是将Model
与 View
一一对应起来
我们用用户登录这个例子来说明:
View层是index.jsp
,Cotroller是/loginServlet
,Model是JavaBean
对象
用户看到的是JSP展示页面,用户输入数据点击登录按钮时,这是JSP会通过数据共享将请求转发到
/loginServlet
控制器上然后控制器再将请求分发到Model上,通过JDBC连接到数据库来查询数据库中是否存在该用户信息。
若存在该用户,则返回信息,让控制器告诉前台页面展示登陆成功的信息;不存在则告诉登陆失败…
View来响应控制器交给它的数据
在这个过程中,控制器其实只是起到了承上启下的作用,它只负责中转(指挥调度),不负责具体的业务操作。
优缺点
【优点】
耦合性低,方便维护,可以利于分工协作
重用性高
【缺点】
- 使得项目架构变得复杂,对开发人员要求高
3. 三层架构
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层[表示层](User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。
区分层次的目的即为了“高内聚低耦合” 的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。
举一个例子来说明吧:
后厨这个电视剧不知道大家听说过没,那会俺上初中时记得寒假无聊时看的一个剧,剧荒的推荐去看看。
在后厨中,小小的餐厅厨房,却是厨师们的一番战场。都说艺术来源于生活,同样,技术也是如此。其实,三层架构就可以用后厨这个场景来抽象理解。
服务员:负责接待客人和传菜
主厨:后厨的头头,后处里主厨说了算。可以理解为架构师,负责后厨和服务员的对接
小厨:每个小厨有自己特定的工作,各司其职
现在,假设饭店开业了,广大学生战友不用再钉钉,MOOC上网课了,楼下的煎饼果子还是那个味!去饭店吃个大餐,西红柿炒鸡蛋。
他们三者是如何联系的?
我走进饭店,漂亮的服务员小姐姐迎接我,毕节这是个看颜的时代,表示层得好看点才能吃饭体验好。Waitress给我递上了菜单,我在菜单上选菜,兜里仅有的几块钱好纠结哈哈哈哈…我点菜,只是看看菜单就可以了,我总不能去后厨问问大师傅你能做什么菜吧!后厨重地,闲人免进!!!就像我们在浏览器看到的页面一样,我只是看攻城狮们想让我看到的东西。
一番精挑细选之后,我决定点个西红柿炒鸡蛋。Waitress拿着菜单,交给后厨的主厨。主厨拿到我的菜单后,一看这小伙子有品位呀,马上安排小弟们给做,必须安排!
小厨A负责洗菜,小厨B负责切菜,小厨C负责炒菜,小厨D负责装盘。那大师傅干嘛了?
主厨都这个级别了,当然是负责呐喊加油呀!安排小厨们干活,负责给服务员上菜。
这时,店里来了一个大佬,说要吃东坡肉。小厨C一想,我靠,我不会做呀!总不能让客人走吧!这时,主厨说,老铁们,不慌,有我在!然后,大厨在重新安排并且指导手下的4个小弟来做这道菜。
对于主厨来说,小弟们可以说自己不会,但是自己却不能。其实小弟们就是数据访层,他们的操作是原子性的,不能再分割了,会的都是最基本的手艺。但是,自己是业务逻辑层,要删除或是添加一个操作,不是简单地直接删除或是添加,而是由数据访问层这些底层的功能组合起来的操作。在删除时,判断用户是否存在;在添加时,也要判断用户是否存在,防止重复操作造成数据冗余。
为什么使用三层
使用三层架构的目的:解耦!!!
同样拿上面饭店的例子来讲:
服务员(UI层)请假——另找服务员;
主厨(BLL层)辞职——招聘另一个主厨;
小厨(DAL)辞职——招聘另一个小厨;
【顾客反映】
你们店服务态度不好——服务员的问题。开除服务员;
你们店菜里有虫子——主厨的问题。换厨师;
任何一层发生变化都不会影响到另外一层!!!
三层架构每层之间的逻辑关系:
三层架构的目的即为了“高内聚,低耦合”的思想。
三层优缺点
【优点】
开发人员可以只关注整个结构中的其中某一层;
可维护性高,可扩展性高
可以降低层与层之间的依赖;
有利于标准化;
利于各层逻辑的复用
【缺点】
降低了系统的性能。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成
有时会导致级联的修改,这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码
增加了开发成本
4. MVC与三层架构的区别
直接看图吧
其实,无论是MVC还是三层架构,都是一种规范,都是奔着"高内聚,低耦合"的思想来设计的。三层中的UI和Servlet来分别对应MVC中的View和Controller,业务逻辑层是来组合数据访问层的原子性功能的。
在三层中,业务逻辑层和数据访问层要遵循面型接口编程的。这种接口定义和具体实现逻辑的分开,非常有利于后续扩展和维护!
可以参考一下羊哥文章,写的很通熟易懂。
为什么我们要面向接口编程?!
实例来理解三层结构和MVC
如果文中有论述不严谨的地方欢迎大家批评指正…
MVC与三层架构理解相关推荐
- 关于MVC与三层架构、个人总结网上杂七杂八得出的最终成果、asp.net (core) MVC、JavaWeb的MVC
阅读本文必须明白的事情 首先需要明白的是不同语言实现的MVC与三层架构对应的层是不一样的!!! 拿.net来说,.net实现MVC与其他语言的MVC具体实现是不同的,asp.net MVC与 MVC ...
- 关于MVC与三层架构
我认为MVC设计模式,关键在于构建Model,Model就是MVC模式的灵魂,他包含了三层架构里面的 "实体规范层"."行为规则层"."数据访问层&q ...
- MVC与三层架构模型笔记
文章目录 1. MVC 1.1 什么是MVC 1.2 为什么需要MVC 2. 项目的三层架构 2.1 表现层 User Interface layer 2.2 业务逻辑层 Business Logic ...
- MVC与三层架构区别
我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. ...
- MVC与三层架构的联系及三层架构实现学生注册功能
MVC与三层架构的联系及三层架构实现学生注册功能 三层架构的逻辑关系: MVC和三层架构的联系: 三层架构实现学生注册功能的逻辑: 学生注册页面: 输入学生信息: 完成学生注册: 代码实现: add. ...
- JavaWeb——MVC与三层架构
文章目录 JavaWeb--MVC与三层架构 1.三层架构 2.MVC 3.MVC与三层架构的对应联系 4.MVC与三层架构的区别 JavaWeb--MVC与三层架构 1.三层架构 三层架构 (3-t ...
- 浅谈 MVC与三层架构
引言: 使用Eclipse开发工具写Java Web项目时会发现,一个中型或者大型项目 随着代码的增多,会发现:代码既可以写在src目录下,也可以写在WebContent目录下.src下可以建很多包 ...
- MVC与三层架构之间的关系
一. MVC MVC是软件工程中的一种软件架构模式,分为Model(模型).View(视图).Controller(控制器) 1. Model model是应用对象,程序员编写程序应有的功能(实现算法 ...
- 什么是 MVC 和 三层架构?
什么是 MVC 和 三层架构? MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻 ...
最新文章
- thinkphp-join
- 【机器学习基础】前置知识(五):30分钟掌握常用Matplotlib用法
- Image-Based Aging Using Evolutionary Computing (EURO 2008)
- 电脑新手:一次了解电脑键盘上每个键的含义!
- 生活感悟——和尾号990的滴滴师傅的聊天
- 代码 优化 指南 实践
- 长安渝北工厂机器人_长安工厂探秘!解密CS75 PLUS究竟是怎样造出来的
- 项目实战大全,提升经验的最好办法(一)
- 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组...
- 为什么要使用git pull --rebase?
- 【Java与智能设备】用户界面基础
- 蓝桥杯单片机数码管技巧
- 简约黑白双色求职简历PPT模板
- 如何在长期地学习和工作中保持精力充沛?
- python简单制作节日贺卡
- 技术解密之百度搜索中台低代码的探索与实践
- 牛客网在线编程专题《剑指offer-面试题39:题目二》判断是否是平衡二叉树
- 智能家居产品的信息安全认证与法律合规之路
- 在冥冥中那些昵称是见识到
- SRT字幕的颜色以及一些特效的设置
热门文章
- 三年经验前端社招——众安保险
- 企业编码生成系统系统设计
- 乡村教师计算机能力提升培训,乡村中小学幼儿园教师信息技术应用能力提升工程培训项目(10页)-原创力文档...
- 戴尔G3双系统:WIN10+Ubuntu18.04
- hyperledger v1.0.5 区块链入门
- 浅谈面试中的乐观锁与悲观锁
- 【PPP-RTK技术面临的机遇与挑战】张小红
- C#窗体项目————影院售票系统
- 中央音乐学院计算机音乐制作专业,中央音乐学院音乐人工智能与音乐信息科技系2021年电子音乐制作方向考试内容...
- python暂停和恢复游戏,暂停/恢复中间的python脚本