MVC与三层架构理解

MVC与三层架构理解1.JSP的发展2.MVC思想优缺点3.三层架构为什么使用三层三层优缺点4.MVC与三层架构的区别

大家好,又见面了,我是你们的朋友全栈君。

1. JSP的发展

早期只有Servlet,只能使用response输出标签数据,非常麻烦后来。JSP的出现,简化了 Servlet的开发。但是过度的使用JSP,在JSP中写大量的java代码,又前端的页面,造成难以维护,难于分工协作的窘境。
再后来,随着java的web开发的逐步完善,公司的开发需要形成一种规范,来更好的管理和维护代码,借鉴MVC的开发模式,使得程序的设计更加合理性。

MVC与三层架构理解

JSP(全称JavaServer Pages)是由Sun公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。

JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

百度百科复制来的哈!!

2. MVC思想

MVC与三层架构理解

MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型、视图控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

MVC每层之间的逻辑关系:

MVC与三层架构理解

M:Model,模型。 JavaBean

  • 完成具体的业务操作,如:查询数据库,封装对象

V:view视图。JSP、HTML等来进行数据展示

C:Controller控制器。 Servlet

  • 获取View的请求

  • 调用模型将数据交给视图进行展示

MVC与三层架构理解

控制器Controller 的作用就是将ModelView一一对应起来

我们用用户登录这个例子来说明:

View层是index.jsp,Cotroller是/loginServlet,Model是JavaBean对象

  1. 用户看到的是JSP展示页面,用户输入数据点击登录按钮时,这是JSP会通过数据共享将请求转发到/loginServlet控制器上

  2. 然后控制器再将请求分发到Model上,通过JDBC连接到数据库来查询数据库中是否存在该用户信息。

  3. 若存在该用户,则返回信息,让控制器告诉前台页面展示登陆成功的信息;不存在则告诉登陆失败…

  4. View来响应控制器交给它的数据

在这个过程中,控制器其实只是起到了承上启下的作用,它只负责中转(指挥调度),不负责具体的业务操作。

优缺点

【优点】

  1. 耦合性低,方便维护,可以利于分工协作

  2. 重用性高

【缺点】

  1. 使得项目架构变得复杂,对开发人员要求高

3. 三层架构

MVC与三层架构理解

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层[表示层](User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。

区分层次的目的即为了“高内聚低耦合” 的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。

举一个例子来说明吧:

后厨这个电视剧不知道大家听说过没,那会俺上初中时记得寒假无聊时看的一个剧,剧荒的推荐去看看。

在后厨中,小小的餐厅厨房,却是厨师们的一番战场。都说艺术来源于生活,同样,技术也是如此。其实,三层架构就可以用后厨这个场景来抽象理解。

MVC与三层架构理解

  • 服务员:负责接待客人和传菜

  • 主厨:后厨的头头,后处里主厨说了算。可以理解为架构师,负责后厨和服务员的对接

  • 小厨:每个小厨有自己特定的工作,各司其职

现在,假设饭店开业了,广大学生战友不用再钉钉,MOOC上网课了,楼下的煎饼果子还是那个味!去饭店吃个大餐,西红柿炒鸡蛋。

他们三者是如何联系的?

我走进饭店,漂亮的服务员小姐姐迎接我,毕节这是个看颜的时代,表示层得好看点才能吃饭体验好。Waitress给我递上了菜单,我在菜单上选菜,兜里仅有的几块钱好纠结哈哈哈哈…我点菜,只是看看菜单就可以了,我总不能去后厨问问大师傅你能做什么菜吧!后厨重地,闲人免进!!!就像我们在浏览器看到的页面一样,我只是看攻城狮们想让我看到的东西。

一番精挑细选之后,我决定点个西红柿炒鸡蛋。Waitress拿着菜单,交给后厨的主厨。主厨拿到我的菜单后,一看这小伙子有品位呀,马上安排小弟们给做,必须安排!

小厨A负责洗菜,小厨B负责切菜,小厨C负责炒菜,小厨D负责装盘。那大师傅干嘛了?

主厨都这个级别了,当然是负责呐喊加油呀!安排小厨们干活,负责给服务员上菜。

这时,店里来了一个大佬,说要吃东坡肉。小厨C一想,我靠,我不会做呀!总不能让客人走吧!这时,主厨说,老铁们,不慌,有我在!然后,大厨在重新安排并且指导手下的4个小弟来做这道菜。

对于主厨来说,小弟们可以说自己不会,但是自己却不能。其实小弟们就是数据访层,他们的操作是原子性的,不能再分割了,会的都是最基本的手艺。但是,自己是业务逻辑层,要删除或是添加一个操作,不是简单地直接删除或是添加,而是由数据访问层这些底层的功能组合起来的操作。在删除时,判断用户是否存在;在添加时,也要判断用户是否存在,防止重复操作造成数据冗余。

为什么使用三层

使用三层架构的目的:解耦!!!

同样拿上面饭店的例子来讲:

  • 服务员(UI层)请假——另找服务员;

  • 主厨(BLL层)辞职——招聘另一个主厨;

  • 小厨(DAL)辞职——招聘另一个小厨;

【顾客反映】

  1. 你们店服务态度不好——服务员的问题。开除服务员;

  2. 你们店菜里有虫子——主厨的问题。换厨师;

任何一层发生变化都不会影响到另外一层!!!


三层架构每层之间的逻辑关系:

MVC与三层架构理解

三层架构的目的即为了“高内聚,低耦合”的思想。

三层优缺点

【优点】

  1. 开发人员可以只关注整个结构中的其中某一层;

  2. 可维护性高,可扩展性高

  3. 可以降低层与层之间的依赖;

  4. 有利于标准化;

  5. 利于各层逻辑的复用

【缺点】

  1. 降低了系统的性能。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成

  2. 有时会导致级联的修改,这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码

  3. 增加了开发成本

4. MVC与三层架构的区别

直接看图吧

MVC与三层架构理解

其实,无论是MVC还是三层架构,都是一种规范,都是奔着”高内聚,低耦合“的思想来设计的。三层中的UI和Servlet来分别对应MVC中的View和Controller,业务逻辑层是来组合数据访问层的原子性功能的。

在三层中,业务逻辑层和数据访问层要遵循面型接口编程的。这种接口定义和具体实现逻辑的分开,非常有利于后续扩展和维护!

可以参考一下羊哥文章,写的很通熟易懂。

为什么我们要面向接口编程?!


实例来理解三层结构和MVC

如果文中有论述不严谨的地方欢迎大家批评指正…

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153040.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10自带虚拟机安装mac系统_苹果系统虚拟机安装win7

    win10自带虚拟机安装mac系统_苹果系统虚拟机安装win7下来给大家介绍虚拟机的形式安装XP,我用的测试软件为vmwarefusion3.0,这个是最著名的虚拟机软件公司vmware针对MAC系统开发的虚拟机软件,可以在苹果里面虚拟出很多个系统,包括windows,linux等。装好软件以后打开文件-新建虚拟机:一般选择“更加无缝”因为我们需要两个系统之间互相访问数据。启动就可以安装了,都是无人…

    2022年8月16日
    8
  • 使用systemctl命令启动和关闭mysql

    使用systemctl命令启动和关闭mysql以前都用service命令管理mysql,现在liunx系统升级了,又有了新的更好的方法管理系统进程,现在我们来学习如何用systemctl命令管理mysql。Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。Systemd是一个系统管理守护进程、工具和库的集合,用于取代SystemV初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。在

    2025年7月3日
    2
  • 线程 、进程、协程 三者区别

    线程 、进程、协程 三者区别

    2021年11月10日
    38
  • LSTM时间序列预测及网络层搭建[通俗易懂]

    最近看到一篇博客,是时间预测问题,数据和代码的原地址在这里,https://www.jianshu.com/p/5d6d5aac4dbd下面只是对其复现和思考:首先关于数据预处理的问题,大家可以参考:https://blog.csdn.net/lilong117194/article/details/82911073这里的问题是:给你一个数据集,只有一列数据,这是一个关于时间序列的数据,从…

    2022年4月7日
    434
  • 使用X-Sendfile下载文件

    使用X-Sendfile下载文件X-Sendfile是一种将文件下载请求由后端应用转交给前端web服务器处理的机制,它可以消除后端程序既要读文件又要处理发送的压力,从而显著提高服务器效率,特别是处理大文件下载的情形下!X-Sendfile通过HTTPheader来实现:在X-Sendfile头中指定一个文件的地址来通告前webserver。不过,在默认情况下它是被大多数web服务器禁用的。而不同的…

    2022年6月5日
    34
  • mac键位的键盘_键盘键位图高清126键

    mac键位的键盘_键盘键位图高清126键mac和Windows在键盘上还是有一些差距的,在习惯了Windows的键位之后还是很难第一时间转换到mac的键位上,为大家整理了一下mac的键位分布,和常用的快捷键。Mac键盘键位分布【F1~12】与传统键盘不同的是,Mac键盘,只是多了几个功能键,可以简单将Mac上的【fn+F112】对应Win上【F112】,其Mac环境上的功能,如下图标注所示。Command键(⌘)Command键是mac独有的一个按键,大多数的快捷组合键都是和它配合使用,相当于Windows下的Ctrl键的功能,但

    2025年6月10日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号