JavaWeb程序架構模式的演進

聲明:本欄目所使用的素材都是凱哥學堂VIP學員所寫,學員有權匿名,對文章有最終解釋權;凱哥學堂旨在促進VIP學員互相學習的基礎上公開筆記。java

JavaWeb程序架構模式的演進

老一輩的程序員通常都經歷了Web程序架構模式的演進,從最開始的在jsp或者jsp+Servlet上作開發,到後來的mvc、三層等。而如今有挺多人學完web,可能都沒怎麼使用過jsp或jsp+Servlet開發過項目,就直接學習使用Spring、Spring Boot或者SpringMVC等框架進行開發。若是沒有經歷這樣一個逐步演進的過程,就很難理解框架帶給了咱們什麼樣的好處,並且開發過程當中遇到問題也難以解決,更別說去學習這些框架中的源碼了。學習是一個按部就班的過程,不能急於求成,因此本文旨在簡單的聊一聊Web的發展史。程序員

1、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

2、web發展初始階段

1.jsp / jsp+Servlet / jsp+JavaBean+Servlet開發模式:spring

在最開始的時候,jsp剛剛出來,那時候的web開發基本都是在jsp+JavaBean上完成的。更有甚着直接把頁面、邏輯、數據處理全都寫在jsp上,想也知道這種方式開發的項目代碼不只亂、並且耦合性至關高,形成項目難以維護。數據庫

純JSP流程圖以下:編程

image

JSP+JavaBean流程圖以下:設計模式

image

相信不少人在剛開始學習JavaWeb的時候,或多或少都使用過以上兩種模式的開發,第一種模式就不用說了,全部的代碼都寫在JSP上耦合度至關地高。第二種模式雖然相較於第一種模式上,在必定程度上解耦了,但JSP依舊要負責頁面控制以及請求與響應的處理,職責不單一。耦合度依舊比較高,高度耦合的結果是JSP代碼十分複雜混亂,後期維護很困難。api

以上這種模式雖然開發起來比較簡單,當時這種模式也可以適合一些小型項目的開發,可是因爲代碼混亂維護困難也就逐漸被淘汰了。安全

領教到這種模式的蛋疼以後就開始加上了Servlet,這時JSP只負責頁面控制,Servlet上負責數據的驗證,JavaBean負責具體的業務邏輯與數據處理、封裝以及和數據庫交互等。服務器

JSP+JavaBean+Servlet流程圖以下:

image

在這種模式上已經開始有點MVC的影子了,可是這種模式還不能稱之爲一個比較完善的MVC設計模式。這種模式相對於以前的兩種模式來講分工更明確,抽取出了Servlet層,體現了一個簡單的分層思想。

思惟導圖:

image

3、web發展初中級階段

1.MVC架構模式

這時候web開發上也開始應用了MVC架構模式,儘管MVC早已不是什麼新鮮的架構模式了,早在桌面開發的時代MVC模式就已經存在。MVC是Model、View、Controller的縮寫,MVC將系統分解爲模型、視圖、控制器三部分,每一部分都相對獨立,職責單一,在實現過程當中能夠專一於自身的核心邏輯。MVC是對系統複雜性的一種合理的梳理與切分,它的思想實質就是「關注點分離」。至於MVC三元素的職責劃分與相互關係,這裏再也不贅述,下圖給出了很是細緻的說明:

image

上圖說明了MVC組件的功能和關係。 MVC模式各部分之間的通訊方式以下:

image

View 傳送指令到 Controller Controller 完成業務邏輯後,要求 Model 改變狀態 Model 將新的數據發送到 View,用戶獲得反饋 全部通訊都是單向的

接受用戶指令時,MVC 能夠分紅兩種方式。一種是經過 View 接受指令,傳遞給 Controller,流程圖以下:

image

另外一種是直接經過controller接受指令,流程圖以下:

image

通常在實際項目中每每採用更靈活的方式,一般會把這兩種方式結合在一塊兒,大體流程圖以下:

image

1.用戶能夠向 View 發送指令(頁面請求)。

2.用戶也能夠直接向 Controller 發送指令(Servlet請求)。

如今的SpringMVC就是MVC架構模式的框架。

MVP架構模式:

MVP與MVC很像,MVP 是從經典的模式MVC演變而來,它們的基本思想有相通的地方:Controller/Presenter負責邏輯的處理,Model提供數據,View負責顯示。因此不少人都不是很分的清這兩種模式的區別,簡單來講二者主要的區別在於,MVC是單向通訊的,而MVP是雙向通訊的。MVP模式將 Controller 更名爲 Presenter,因此同時改變了通訊方向,流程圖以下:

image

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等代碼,示意圖:

image

以上已經介紹了幾種架構模式,能夠看到架構模式的演進目的都是爲了解耦,低耦合的架構才能方便於項目後期的維護和擴展,好的架構模式才能讓項目有較好的健壯性。

4、web發展中高級階段

這個階段開始使用EJB進行分佈式應用的開發:

EJB是sun的JavaEE服務器端組件模型,設計目標與核心應用是部署分佈式應用程序。簡單來講就是把已經編寫好的程序(即:類)打包放在服務器上執行。憑藉java跨平臺的優點,用EJB技術部署的分佈式系統能夠不限於特定的平臺。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定義了一個用於開發基於組件的企業多重應用程序的標準。其特色包括網絡服務支持和核心開發工具(SDK)。 在J2EE裏,Enterprise Java Beans(EJB)稱爲Java 企業Bean,是Java的核心代碼,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)。在EJB3.0推出之後,實體Bean被單獨分了出來,造成了新的規範JPA。

EJB 從技術上而言不是一種」產品」,EJB 是一種描述了構建應用組件要解決的標準: 可擴展 (Scalable)
分佈式 (Distributed)
事務處理(Transactional)
數據存儲(Persistent)
安全性 (Secure)

以上轉自百度百科。

因爲我我的沒有使用過EJB進行開發,不敢隨便發表意見,以避免誤導你們,對EJB有興趣的能夠參考如下文章:

http://www.uml.org.cn/j2ee/2009112011.asp

Spring的誕生:

Rod Johnson在2002年編寫的《Expert One-to-One J2EE Design and Development》一書,Rod 在本書中對J2EE正統框架(EJB)臃腫、低效、脫離現實的種種學院派作法提出了質疑,並以此書爲指導思想,編寫了interface21框架,也就是後來的Spring。

基於最優方法並適用於各類應用類型的Spring框架的創建要歸功於Rod Johnson。這些想法也在他的書中得以闡述。書發表後,基於讀者的要求,源代碼在開源使用協議下得以提供。

一批自願拓展Spring框架的程序開發員組成了團隊,2003年2月在Sourceforge上構建了一個項目。在Spring框架上工做了一年以後,這個團隊在2004年3月發佈了第一個版本(1.0)。這個版本以後,Spring框架在Java社區裏變得異常流行,部分的要歸結於它好於通常水準的文檔功能和參考文獻,特別是對於一個開源項目而言尤爲如此。

Spring解決的是業務邏輯層和其餘各層的鬆耦合問題,所以它將面向接口的編程思想貫穿整個系統應用。簡單來講,Spring是一個分層的JavaSE/EEfull-stack(一站式) 輕量級開源框架。

Spring框架的特徵:

輕量
控制反轉
面向切面
容器
框架
MVC

Spring架構概述:

image

Spring雖然相較於EJB要輕量不少,可是發展到如今,Spring也有些臃腫了,在配置上也稍微有些繁瑣,可是Spring依舊是如今的主流框架之一。框架的存在就是爲了方便於咱們使用一些架構模式,沒必要再從底層去開始開發,提升了開發的效率。

5、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,更別說去設計架構模式了。

6、小結

從以上的演進簡史能夠看到目前這些主流框架是怎麼來的,爲何要有這些框架。能夠說咱們目前學習技術的時代遇上了最好的時代,如今有那麼多優秀的開源框架可使用,又有那麼多的設計思想能夠借鑑,咱們跳過了不少前人常常踩的坑,正是前人踩過了這些坑以後,才能發展那麼多優秀的開源框架與設計思想。可是咱們也應該要去經歷一下這種架構模式的演進,才能深入體會到不一樣的架構模式與框架帶給咱們的好處。如今的新東西愈來愈多,你我只有不停的進步,不停地學習才能跟上這個時代。

相關文章
相關標籤/搜索