声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。
JavaWeb程序架构模式的演进
一、web发展简史
以目前Spring Boot作为时间轴的话,web发展的过程大致可以分为以下几个阶段: 1.纯jsp / jsp+Servlet / jsp+JavaBean+Servlet
2.MVC / MVP / 三层架构
3.使用EJB进行分布式应用的开发,EJB是重量级框架,在使用上比较复杂和麻烦
4.由于EJB太重了,于是Spring应运而生,但是Spring在发展上越来越臃肿,所以还是有许多繁琐的配置
5.同样的由于String配置太繁琐,于是Spring boot诞生了,这时就可以体验到 “约定大于配置” 的乐趣
二、web发展初始阶段
1.jsp / jsp+Servlet / jsp+JavaBean+Servlet开发模式:
在最开始的时候,jsp刚刚出来,那时候的web开发基本都是在jsp+JavaBean上完成的。更有甚着直接把页面、逻辑、数据处理全都写在jsp上,想也知道这种方式开发的项目代码不仅乱、而且耦合性相当高,造成项目难以维护。
纯JSP流程图如下:
相信很多人在刚开始学习JavaWeb的时候,或多或少都使用过以上两种模式的开发,第一种模式就不用说了,所有的代码都写在JSP上耦合度相当地高。第二种模式虽然相较于第一种模式上,在一定程度上解耦了,但JSP依旧要负责页面控制以及请求与响应的处理,职责不单一。耦合度依旧比较高,高度耦合的结果是JSP代码十分复杂混乱,后期维护很困难。
以上这种模式虽然开发起来比较简单,当时这种模式也能够适合一些小型项目的开发,但是由于代码混乱维护困难也就逐渐被淘汰了。
领教到这种模式的蛋疼之后就开始加上了Servlet,这时JSP只负责页面控制,Servlet上负责数据的验证,JavaBean负责具体的业务逻辑与数据处理、封装以及和数据库交互等。
JSP+JavaBean+Servlet流程图如下:
三、web发展初中级阶段
1.MVC架构模式
这时候web开发上也开始应用了MVC架构模式,尽管MVC早已不是什么新鲜的架构模式了,早在桌面开发的时代MVC模式就已经存在。MVC是Model、View、Controller的缩写,MVC将系统分解为模型、视图、控制器三部分,每一部分都相对独立,职责单一,在实现过程中可以专注于自身的核心逻辑。MVC是对系统复杂性的一种合理的梳理与切分,它的思想实质就是“关注点分离”。至于MVC三元素的职责划分与相互关系,这里不再赘述,下图给出了非常细致的说明:
View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状态 Model 将新的数据发送到 View,用户得到反馈 所有通信都是单向的
接受用户指令时,MVC 可以分成两种方式。一种是通过 View 接受指令,传递给 Controller,流程图如下:
一般在实际项目中往往采用更灵活的方式,通常会把这两种方式结合在一起,大致流程图如下:
MVP特点:
各部分之间的通信,都是双向的。
View 与 Model 不发生联系,都通过 Presenter 传递。
View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,大部分主要逻辑都部署在那里。
三层架构模式:
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
很多人容易把三层模式与MVC模式混淆,三层与MVC的最不同的地方在于三层是没有Controller控制器的概念。虽然同样是架构级别的,三层与MVC相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。MVC没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了,在三层中也提到了Model概念,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。
在三层中JSP与Servlet代码都属于表示层,业务逻辑层则是完成业务规则的实体类,数据访问层则是JDBC等代码,示意图:
Spring虽然相较于EJB要轻量很多,但是发展到现在,Spring也有些臃肿了,在配置上也稍微有些繁琐,但是Spring依旧是现在的主流框架之一。框架的存在就是为了方便于我们使用一些架构模式,不必再从底层去开始开发,提高了开发的效率。
五、web发展目前阶段
到目前为止,已经出现了很多优秀的java开源框架,常见的有Spring、SpringMVC、Spring Boot、Struts 、Hibernate、MyBatis等,其中Spring Boot是Spring框架的简化。通过这些框架,我们可以很高效的应用架构模式去开发大型的项目。
化繁为简,Spring Boot框架:
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Spring Boot特点:
可以创建独立的Spring应用程序
嵌入的Tomcat,无需部署WAR文件
简化Maven配置
自动配置Spring
提供生产就绪型功能,如指标,健康检查和外部配置
绝对没有代码生成以及不要求配置XML
Spring Boot虽然目的是为了简化Spring,似乎看起来无需去学习Spring的繁琐配置,直接学Spring Boot多好啊,配置简单美滋滋,但是如果没有忍受过Spring的繁琐配置,没有经历过架构模式的演进以及JavaWeb基础不扎实的话,在使用Spring Boot的过程中就容易出现没有遇到过的错误,也不知道如何去解决。而且设计模式不熟悉的话,也不知道人家框架是怎么进行实现的,设计思想完全不知道,那么即便有好的框架在手也没法玩得6,更别说去设计架构模式了。
六、小结
从以上的演进简史可以看到目前这些主流框架是怎么来的,为什么要有这些框架。可以说我们目前学习技术的时代赶上了最好的时代,现在有那么多优秀的开源框架可以使用,又有那么多的设计思想可以借鉴,我们跳过了很多前人经常踩的坑,正是前人踩过了这些坑之后,才能发展那么多优秀的开源框架与设计思想。但是我们也应该要去经历一下这种架构模式的演进,才能深刻体会到不同的架构模式与框架带给我们的好处。现在的新东西越来越多,你我只有不停的进步,不停地学习才能跟上这个时代。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!