两张图彻底搞懂MVC模型和三层框架以及区别和优缺点 建议收藏!


目录

1.前言:

2.MVC模型:

3.MVC优缺点:

4.三层架构:

5.三层架构优缺点:


1.前言:

首先要先说明MVC不仅仅是Java的东西,大部分人认为MVC是java独有的其实几乎现在所有B/S结构(浏览器/服务器)的软件都采用了MVC设计模式。如C##也有MVC的设计模式。而三层框架是由JavaWeb提出的,也就是说这是JavaWeb独有的!

并且MVC是MVC,三层架构是三层架构,是两个不同的概念只是有些相似而已所以这俩是毫无关系的。

三层架构是从整个应用程序架构的角度来分的三层(如果程序需要,还可以分多层)。

为什么要用MVC:

1. 早期只有servlet,只能使用response输出标签数据,非常麻烦

2. 后来有jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,又写html表,造成难于维护,难于分工协作

3. 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性


2.MVC模型:

思想将前台展示代码和后端业务代码进行分离以使代码可扩展性、可复用性、可维护性、灵活性加强。

MVC是一种架构型的设计模式是一种思想,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理。

概念:

MVC是用一种业务逻辑、数据、界面显示分离的方法组织代码。MVC把纯净的界面展示逻辑(用户界面)独立到一些文件中(Views),把一些和用户交互的程序逻辑(Controller)单独放在一些文件中,在 Views 和 Controller 中传递数据使用一些专门封装数据的实体对象,这些对象,统称为Model。MVC可对程序的后期维护和扩展提供了方便,并且使程序某些部分的重用提供了方便。而且MVC也使程序简化,更加直观。


而其中最典型的MVC就是JSP + servlet + javabean的模式

MVC三元组:

Model (模型):用javabean实现,用于封装业务数据,完成具体的业务逻辑操作,如:查询数据库,封装对象
View (视图):用jsp实现,用于显示数据。如:用户实际上看到的网页信息或用户界面。
Controller (控制器):用servlet实现,用于调度model和view,负责请求转发。Controller只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

因此控制器就相当于调度员一样,负责调用model和view工作一样。Controller存在的目的则是确保Model和View的同步,一旦Model改变,View应该同步更新。

流程:

1.首先浏览器发送请求,Controller获取用户的请求,

2.然后Controller调用Model让Model里的业务操作来进行处理,

3.Model处理完毕后将返回的模型数据返回给Controller,

4.Controller根据模型返回会的数据选择视图,展示模型。

注:

在Web MVC模式下,模型无法主动推数据给视图

在标准型的MVC中,将模型直接推给视图


3.MVC优缺点:

1. 优点:

1. 降低代码耦合性,方便维护,可以利于分工协作。所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其他层中的代码。

2. 有利于组件的重用。如控制层可独立成一个能用的组件,表示层也可做成通用的操作界面。可以为一个模型在运行时同时建立和使用多个视图。

2. 缺点:

1. 增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

2.对开发人员要求高。

3.视图层展示依赖与模型层,视图层需要很少的字段,但是模型层全部提供,性能上有一定影响


4.三层架构:

思想:三层架构是采用分层思想,减轻类与类(接口)之间的耦合,通俗的说是为了减轻代码之间的依赖性,避免产生牵一发而动全身的后果

三层:

1、Web层(界面层):和用户直接交互相关操作(传递参数,跳转页面)。包含JSP和Servlet等与WEB相关的内容
2、Service层(业务逻辑层)业务逻辑相关的操作。不包含JavaWeb API
3、Dao层(数据访问层):数据访问的相关操作(增删改查)。

注:在业务层中不能出现JavaWeb API,例如request、response等。

流程:

1.首先用户在浏览器进行一个操作,浏览器发送用户请求给web层的Servlet,

2.Servlet接受到前台传递的参数数据然后调用Servlet里对应的具体方法并把数据传递给Service层,(相当于Servlet获取到数据但没有处理这些数据的方法,只能调用Service层的方法来处理这些数据)

3.Service层处理完业务逻辑相关的操作然后调用Dao层的方法把参数传递给Dao层,

4.Dao通过Jdbc或者持久化将数据注入到数据库中去,(这里Dao层的数据库操作语言因为没有参数,所以需要从servlet获取参数,看着方法调来调去是因为方便后面可以重复使用不同的参数或方法来完成相同类型的数据库操作。比如:单个删除和多个删除)

5.继而反馈给Service层,Service层响应给Web层的Servlet,Servlet返回给Jsp页面。

注:Web层依赖Service层,Service层依赖Dao层,Dao层依赖Web层!

5.三层架构优缺点:

  优点:
  1、开发人员可以只关注整个结构中的其中某一层;
  2、可以很容易的用新的实现来替换原有层次的实现;
  3、可以降低层与层之间的依赖,相互分工高聚能、低耦合;
  4、有利于标准化;
  5、利于各层逻辑的复用。
6、扩展性强。不同层负责不同的层面。
7、安全性高。用户端只能通过逻辑层来访问数据层,减少了入口点,把很多危险的系统功能都屏蔽了。
8、项目结构更清楚,分工更明确,有利于后期的维护和升级
  缺点:

  1、降低了系统的性能。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
  2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
3、增加了代码量,增加了工作量。