天天看點

JavaWeb三層架構的了解/三層架構的優缺點/三層架構與MVC的差別

1、三層架構

我們的開發架構一般都是基于兩種形式,一種是C/S架構,也就是用戶端/伺服器,另一種是B/S架構,也就是浏覽器伺服器。在JavaEE開發中,幾乎全都是基于B/S架構的開發。那麼在B/S架構中,系統标準的三層架構從上至下分别包括:表現層、業務層、持久層。區分層次的目的即為了“高内聚低耦合”的思想。在軟體體系架構設計中,分層式結構是最常見,也是最重要的一種結構。三層架構在我們的實際開發中使用的非常多。

三層架構中,每一層各司其職,接下來我們就說說每層都負責哪些方面:

  • 表現層:
    • 表現層也稱為界面層,位于最外層(最上層),離使用者最近。也就是我們常說的web層。
    • 它負責接收用戶端請求,向用戶端響應結果,通常用戶端使用http協定請求web層,web需要接收http請求,完成http響應。
    • 表現層包括展示層和控制層:控制層負責接收請求,展示層負責結果的展示。
    • 表現層依賴業務層,接收到用戶端請求一般會調用業務層進行業務處理,并将處理結果響應給用戶端。
    • 表現層的設計一般都使用MVC模型。(MVC是表現層的設計模型,和其他層沒有關系)
  • 業務層:
    • 也就是我們常說的 service層。它負責業務邏輯處理(主要是從資料庫中得到資料然後對資料進行邏輯處理),和我們開發項目的需求息息相關。
    • web層依賴業務層,但是業務層不依賴web層。
    • 業務層在業務處理時可能會依賴持久層,如果要對資料持久化需要保證事務一緻性。(也就是我們說的,事務應該放到業務層來控制)
    • 業務層在體系架構中的位置很關鍵,它處于資料通路層與表示層中間,起到了資料交換中承上啟下的作用。由于層是一種弱耦合結構,層與層之間的依賴是向下的,底層對于上層而言是“無知”的,改變上層的設計對于其調用的底層而言沒有任何影響。如果在分層設計時,遵循了面向接口設計的思想,那麼這種向下的依賴也應該是一種弱依賴關系。業務層的設計對于一個支援可擴充的架構尤為關鍵,因為它扮演了兩個不同的角色。對于資料通路層而言,它是調用者;對于表示層而言,它卻是被調用者。依賴與被依賴的關系都糾結在業務層上,如何實作依賴關系的解耦,則是除了實作業務邏輯之外留給設計師的任務。
  • 持久層:
    • 也就是我們是常說的dao層。負責資料持久化,包括資料層即資料庫和資料通路層,資料庫是對資料進行持久化的載體,資料通路層是業務層和持久層互動的接口,業務層需要通過資料通路層将資料持久化到資料庫中。通俗的講,持久層就是和資料庫互動,對資料庫表進行增删改查的。
    • 采用DAO模式,建立實體類和資料庫表映射(ORM映射)

在三層中JSP與Servlet代碼都屬于表現層,業務邏輯層則是完成業務規則的實體類,資料通路層則是JDBC等代碼。

2、三層架構的優缺點

優點:

  • 開發人員可以隻關注整個結構中的其中某一層;
  • 可以很容易地用新的實作來替換原有層次的實作;
  • 可以降低層與層之間的依賴;
  • 有利于标準化;
  • 利于各層邏輯的複用。
  • 結構更加的明确
  • 在後期維護的時候,極大地降低了維護成本和維護時間

三層架構把不同層的業務職責分離得更加徹底,邏輯層不包含一丁點的視圖層代碼,同樣的資料層也不應該包含一丁點的邏輯層代碼,符合低耦合的思想。

三層架構更好地實作了子產品化程式設計,使用三層架構設計的系統更容易擴充、更換,特别是如今不止pc端一種裝置,如果沒做好分層就無法适應多裝置的通路。例如表示層我們使用jsp+Servlet做的,面向的是web,如果哪天不做web了,要把整個表示層更換成桌面的圖形化來顯示,那麼使用了三層架構的話,隻需要更換表示層即可,業務邏輯層和資料層都可以進行複用。如果沒有進行分層的話,各個子產品都耦合在一起就無法進行複用,隻能重新再編寫一個适應桌面的系統出來,這樣就很耗時耗力了。

我們都知道WebService是一種跨程式設計語言和跨作業系統平台的遠端調用技術,如果一個系統是使用三層架構進行設計的,那麼邏輯層就可以通過WebService共享給其他不同語言編寫的應用程式調用。

缺點:

  • 降低了系統的性能。這是不言而喻的。如果不采用分層式結構,很多業務可以直接造訪資料庫,以此擷取相應的資料,如今卻必須通過中間層來完成。
  • 有時會導緻級聯的修改。這種修改尤其展現在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設計符合分層式結構,可能需要在相應的業務邏輯層和資料通路層中都增加相應的代碼。

3、三層架構與MVC的差別

  • 很多人容易把三層架構與MVC模式混淆,三層與MVC的最不同的地方在于三層是沒有Controller控制器的概念。雖然同樣是架構級别的,三層與MVC 相同的地方在于他們都有一個表現層,但是他們不同的地方在于其他的兩個層。MVC沒有把業務的邏輯通路看成兩個層,這是采用三層架構或MVC搭建程式最主要的差別。當然了,在三層中也提到了Model概念,但是三層架構中Model的概念與MVC中Model的概念是不一樣的,“三層” 中典型的Model層是以實體類構成的,而MVC裡,則是由業務邏輯與通路資料組成的。
  • 三層是基于業務邏輯來分的;而MVC是基于頁面來分的。

    三層是種軟體架構,通過接口實作程式設計;MVC模式是一種複合設計模式,一種解決方案。

    三層模式是體系結構模式;MVC是設計模式。

    三層模式又可歸于部署模式;MVC可歸于表示模式。

繼續閱讀