MVC开发模式和三层架构模式详解

## MVC:开发模式
        ※1.jsp演变历史
           1.早期只有servlet,只能使用response输出标签数据,非常的麻烦
           2.后来有了jsp,简化了servlet的开发,如果过度使用jsp,在jsp中既写大量的java代码,又写html表,造成难以维护,难以分工协作
           3.再后来,java的web开发,借鉴MVC这种开发模式,使得这个程序的设计更加的合理性
              (在早期没有jsp,只有servlet,这个时候呢,我们想给用户或者说客户端去响应一些动态的页面,那么这个页面里边有程序获取的数据,然后也有静态的html标签数据,我们只能使用response输出标签数据,这样就非常的麻烦,后期sun公司就制出来jsp的标准,后来有了jsp,简化了servlet的开发,简化之后呢,人们发现jsp是真的好用,我想写java代码,就写一点,我想写标签,我直接在页面里边写,就可以了,而且jsp写完之后,也不用编译,直接就运行也不用重新部署,也不用重启服务器,直接运行测试了,非常得方便,然后人们就一度过度的使用了,这个jsp,在jsp里边写了大量的代码,以及html标签,那么这就造成一个问题,如果,这个项目比较小的话,,还可以,但是项目的体积一旦非常大的时候,你发现那个页面又有html标签,又有很多java代码,根本就没有办法去阅读,而且很难去维护,谁接手这样的项目,谁就崩掉了,所以在后来呢,人们就要求说,尽量不要在jsp中写代码,如果过度使用jsp,在jsp中既写大量的java代码,又写html表,造成难以维护,难以分工协作,只有一个优点就是你在写代码的时候很爽,你的开发会很简单,但是太长了只有你能看懂,前段的人们看不懂也不知道怎么不去修改维护,再后来,javaEE或者web开发借鉴了一种开发模式叫做MVC,在MVC这个模式里边,规定了什么样的代码该写哪些地方就写哪些地方,不要过度地去使用jsp。将来我们写代码就要遵循这种开发模式,即使你不遵循也能写出来项目,但是写出来之后,将来你在公司工作的时候,如果你不遵循这些模式的话,那么你写出来的代码可能就别人不一样,你的代码审查是过不了,提交就过不了,老板可能让你重新写,所以我们得遵循这种模式,)
        ※ 2.MVC:
           1.M:Model,模型。JavaBean
                ※ 2.完成具体的业务操作,如:查询数据库,封装对象
            2.V:View,视图 JSP
                ※ 展示数据
            3.C:Controller,控制器 Servlet
                ※ 获取用户的输入
                ※ 调用模型
                ※ 将返回的数据交给视图进行展示
              (MVC指的是,他将一个程序,分为三个部分,这三个部分分别是M、V和C,M:Model,模型,V:View,视图,C:Controller,控制器,他把一个程序设计为这个三部分,那么这三部分各司其职,使他们三部分的耦合度降低了,那么在之前jsp中,我们把他们放在一块,这样我们的代码冗余,非常多,而且非常多,分不开,不好维护,很难分工,那么MVC就把程序分为这三块,那么这三块怎么去表示呢,首先呢有个浏览器,将来要请求web页面,web资源啊,那么在服务器里边,浏览器首先会去请求资源,那么请求资源的时候呢,第一步他要去经过一个控制器,那么这个控制器现在去找到,或者说去调用第二块内容,第二块就是我们对于的Model模型,那么它调用模型干嘛呢,调用模型去进行一些业务的操作,控制器去调用模型进行业务操作,操作完之后呢,模型把数据返回给这个控制器,那么返回给控制器之后,控制器在干一件事情,控制器再把数据给视图去展示,那么视图呢就把模型的数据给展示了,展示了之后,然后呢将来就可以给浏览器和客户端做出对应的响应,那么在这个设计模式里边,控制器他充当的功能是第一他要去调用模型来去进行业务操作,那么这个业务操作是由模型完成的,那么什么叫业务操作?比如说,数据从数据库里边查询,他就是一个业务操作,那么将来模型就是用来封装数据的,或者是来处理业务逻辑的,而控制器他是相当于做了一个分发的工作,控制器干这么一件事,第一件事获取客户端的输入,获取这个输入之后,第二个事去调用模型,去查询数据获取数据,然后呢第三个去将数据交给视图展示,控制器中不做具体的业务操作,他只是一个中转,模型干的事其实也非常简单,就是来进行业务逻辑操作,比如说查询数据库,封装数据,然后呢视图的功能也比较单一,就是用来展示数据的,这就是我们所说的MVC,那么在我们的web开发过程中,M我们使用的是JavaBean来完成的,JavaBean就是java对象,充当模型,然后呢Controller这块我们使用Servlet来充当,也就是说在我们后期写代码的过程中,Servlet里边只做那三件事,获取客户端的输入,调用模型,将数据交给视图展示,视图层我们使用jsp来充当,所以在我们的javaWeb开发中,Servlet充当控制器,JavaBean充当模型,JSP当做视图,这就是我们所说的MVC模式。要通过控制器Servlet将这个模型交给视图,我们就需要用到域对象来共享数据,)
在这里插入图片描述
                ※优缺点:
             1.优点:耦合性低,方便维护,可以利用分工协作
              (控制器可以找一部分人来,模型可以找一部分人来写,jsp可以找一部来写,而且利于后期维护)
             2.重用性高:
              (因为说现在写了个模型,模型这块,我们把业务逻辑操作的数据交给控制器,那么控制器可以交给视图展示,也可以把数据交给另外一些视图展示,也可以交给移动端展示没问题,重用性是非常高的,只是呢可能jsp和移动端写的代码可能不一样,对这个数据的解析操作不一样,但是Controller和模型是不是可以重复用了)
              3.周期成本低
              4.部署快
              5.有利于软件工程管理
                ※缺点:
              (程序分为了三部分,那么对于我们开发人员来说,要求就会更高些,因为我们要分别去编写这个三个部分,或者说我们要能够看得懂这三部分,在设计之初,我们就要想好整个怎么去设计)
             1.没有明确定义
             2.不适用一些小型的,中等规模的应用程序
             3.增加系统结构和实现的复杂性
             4.使得我们的项目的架构变得复杂,对开发人员要求就会高

## 三层架构:软件设计架构
           1.界面层(表示层):用户看的见的界面。用户可以通过界面上的组件和服务器进行交互
           2.业务逻辑层;处理业务逻辑。(登录什么的)
           3.数据访问:操作数据存储文件。(操作数据库,xml,properties)
MVC开发模式和三层架构模式详解_第1张图片
              (首先有个浏览器和服务器,还有个数据库,首先呢通过浏览器给web服务器发送一个请求,然后将来web服务器经过一系列的运转,最终他要去操作咱们的数据库,操作了数据库之后,数据库把数据呢返回给web服务器,然后呢,web服务器在将数据给展示到浏览器上,这个过程就完毕了。那么接下来,我们主要研究的是三层架构,也就是说在服务器里边部署的软件项目会分为三层,界面层(表示层/web层)、业务逻辑层(service层)、数据访问层(dao层)Data Access Object,这三层分别是有一些调用关系的,那么首先由界面层,由浏览器来访问这个界面层,那么界面层呢来调用对应的业务逻辑层,由业务逻辑层再去访问数据访问层,dao操作数据库,操作完数据后,数据库会把数据返回给dao层,dao层再把数据封装返回给service层,service层在把数据给界面层,界面层把数据显示到最终的浏览器中,客户端中,这样整个过程就完毕了,那么之前介绍了,MVC,在MVC中,在web开发中,首先浏览器来访问一个控制器,在这个地方控制器我们用servlet来充当,控制器可以接收用户的请求,并且获取用户提交的参数信息,将数据封装然后Servlet去调用业务逻辑层,那么由业务逻辑层调用dao,然后呢在返回,返回回来业务逻辑层再去把数据给Servlet,再由Servlet将数据比如说存储起来,转发到一个jsp页面,,由这个jsp页面最终给客户端做出响应,jsp页面充当的是一个视图的一个动作,在这整个过程中,以前我们写代码,我们没有中间的业务逻辑层,其实数据访问层和界面层都很好理解,但是这个业务逻辑层确实存在得很尴尬,我们难道不可以直接用Servlet直接调用数据访问层吗。其实是这样,在数据访问层中,他定义了对于数据库最基本的CRUD操作,什么是最基本的,就是他能完成的功能很单一,就增删改查,那么这些非常单一的功能,将来肯定不能一个方法就能完成一件具体的事情,那么这么方法可以在业务逻辑层中,去组合成一些复杂的功能,或者复杂的业务操作,比如说,在业务逻辑里边有两个方法,第一个比如说叫A功能,第二个B功能,那么现在A功能,他用了一个find()方法,又用了一个insert()方法,那么他把这两个方法组合起来,形成了A功能,然后B功能他用了find()方法,以及delete方法,那么它呢又把这两个方法组成了一个B功能,在业务逻辑层中,其实就是对于dao层中单个的简单的方法定义一些排列组合,形成一些复杂的业务功能,那么这样做的好处就可以让我们的数据访问层dao层的方法的复用性大大增强了,find()方法在A中可以用,在B中也可以用,这就是业务逻辑层存在的意义价值,简而言之就是业务逻辑层组合dao层中的简单方法,形成复杂的功能,那么在将来在Servlet层中我们会编写大量的代码来去处理这些复杂的业务逻辑的操作,三层各司其职,互不干扰,这三层也对于这不同的包,我们每一层都起一个不一样的包来区分,将来呢,这样包,我们看到之后,就知道了对应的里面应该放什么代码了,比如web层cn.itcast.项目名.web,第二层也一样,前边不变,cn.itcast.项目名.service,第三层cn.itcast.项目名.dao。。。SpringMVC是web层的框架,MyBatis是dao层的框架, Spring框架是service层,当然Spring不仅仅操作这个业务逻辑层,他还管web,也管数据访问层,Spring框架被称为JAVAEE的灵魂框架)

你可能感兴趣的:(javaweb)