首頁 Java java教程 java三層架構原理與作用的總結(圖)

java三層架構原理與作用的總結(圖)

Apr 18, 2017 am 09:07 AM

這篇文章主要對Java三層架構的概念、作用等進行了介紹,需要的朋友可以參考下

三層架構


 

三層架構(3-tier application) 通常意義上的三層架構就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL)、資料存取層(DAL)。區分層次的目的即為了「高內聚,低耦合」的思想。

概念簡介

1、表現層(UI):通俗講就是展現給使用者的介面,即使用者在使用一個系統的時候他的所見所得。

2、業務邏輯層(BLL):針對特定問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。   

3、資料存取層(DAL):此層所做交易直接操作資料庫,針對資料的增加、刪除、修改、查找等。

概述

在軟體體系架構設計中,分層式結構是最常見,也是最重要的一種結構。微軟建議的分層式結構一般分為三層,由下至上分別為:資料存取層、業務邏輯層(又或稱為領域層)、表示層。

三層結構原理:

3層次中,系統主要功能和業務邏輯都在業務邏輯層中處理。

所謂三層體系結構,是在客戶端與資料庫之間加入了一個“中間層”,也叫元件層。這裡所說的三層體系,不是指物理上的三層,不是簡單地放置三台機器就是三層體系結構,也不僅僅有B/S應用才是三層體系結構,三層是指邏輯上的三層,即使這三個層放置到一台機器上。

三層體系的應用程式將業務規則、資料存取、合法性校驗等工作放到了中間層進行處理。通常情況下,客戶端不會直接與資料庫進行交互,而是透過COM/DCOM通訊與中間層建立連接,再經由中間層與資料庫進行交互。

各層的作用

1:資料資料存取層:主要是對原始資料(資料庫或文字檔案等存放資料的形式)的操作層,而不是指原始數據,也就是說,是對數據的操作,而不是數據庫,具體為業務邏輯層或表示層提供數據服務.

2:業務邏輯層:主要是針對具體的問題的操作,也可以理解成對數據層的操作,對數據業務邏輯處理,如果說數據層是積木,那麼邏輯層就是對這些積木的搭建。

3:表示層:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表現成:aspx, 如果邏輯層相當強大和完善,無論表現層如何定義和更改,邏輯層都能完善地提供服務。

具體的區分方法

1:資料資料存取層:主要看你的資料層裡面有沒有包含邏輯處理,實際上他的各個函數主要完成各個對資料檔案的操作。而不必管其他操作。

2:業務邏輯層:主要負責對資料層的操作。也就是說把一些資料層的操作組合起來。

3:表示層:主要對使用者的請求接受,以及資料的返回,為客戶端提供應用程式的存取。

表示層

位於最外層(最上層),離使用者最近。用於顯示數據和接收使用者輸入的數據,為使用者提供互動式操作的介面。

業務邏輯層

業務邏輯層(Business Logic Layer)無疑是系統架構中體現核心價值的部分。它的關注點主要集中在業務規則的製定、業務流程的實現等與業務需求有關的系統設計,也即是說它是與系統所應對的領域(Domain)邏輯有關,很多時候,也將業務邏輯層稱為領域層。

例如Martin Fowler在《Patterns of Enterprise Application Architecture》一書中,將整個架構分為三個主要的層:表示層、領域層和資料來源層。作為領域驅動設計的先驅Eric Evans,對業務邏輯層作了更細緻地劃分,細分為應用層與領域層,透過分層進一步將領域邏輯與領域邏輯的解決方案分開。

業務邏輯層在體系架構中的位置很關鍵,它處於資料存取層與表示層中間,起到了資料交換中承上啟動的作用。由於層是一種弱耦合結構,層與層之間的依賴是向下的,底層對於上層而言是「無知」的,改變上層的設計對於其調用的底層而言沒有任何影響。

如果在分層設計時,遵循了面向介面設計的思想,那麼這種向下的依賴也應該是一種弱依賴關係。因而在不改變介面定義的前提下,理想的分層式架構,應該是支援可抽取、可替換的「抽屜」式架構。正因為如此,業務邏輯層的設計對於一個支援可擴展的架構尤其關鍵,因為它扮演了兩個不同的角色。

對於資料存取層而言,它是呼叫者;對於表示層而言,它卻是被呼叫者。依賴與被依賴的關係都糾結在業務邏輯層上,如何實現依賴關係的解耦,則是除了實作業務邏輯之外留給設計師的任務。

資料層

資料存取層:有時也稱為是持久層,其功能主要是負責資料庫的訪問,可以存取資料庫系統、二進位檔案、文字文檔或是XML文檔。

簡單的說法就是實作資料表的Select,Insert,UpdateDelete的運算。如果要加入ORM的元素,那麼就會包含物件和資料表之間的mapping,以及物件實體的持久化。

優缺點

優點

1、開發人員可以只專注於整個結構中的其中某一層;

2、可以很容易的用新的實作來取代原有層次的實作;

3、可以降低層與層之間的依賴;

4、有利於標準化;

5、利於各層邏輯的複用。

6、結構更加的明確

7、在後期維護的時候,大幅降低了維護成本和維護時間

缺點

#1、降低了系統的效能。這是不言而喻的。如果不採用分層式結構,很多業務可以直接造訪資料庫,以此取得相應的數據,如今卻必須透過中間層來完成。

2、有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,為確保其設計符合分層式結構,可能需要在對應的業務邏輯層和資料存取層中都增加對應的程式碼。

3、增加了開發成本。

規則

三層結構的程式不是說把專案分成DAL, BLL, WebUI三個模組就叫三層了, 下面幾個問題在你的專案裡面:

1. UILayer裡面只有少量(或沒有)SQL語句或預存程序呼叫, 並且這些語句保證不會修改資料?

2. 如果把UILayer拿掉, 你的專案還能在Interface/API的層次上提供所有功能嗎?

3. 你的DAL可以移植到其他類似環境的專案嗎?

4. 三個模組, 可以分別運行於不同的伺服器嗎?

如果不是所有答案都為YES, 那麼你的專案還不能算是嚴格意義上的三層程式。三層程式有一些需要約定遵守的規則: 

1. 最關鍵的, UI層只能作為一個外殼, 不能包含任何BizLogic的處理過程

2. 設計時應該從BLL出發, 而不是UI出發. BLL層在API上應該實現所有BizLogic, 以面向對象的方式

#3. 不管資料層是一個簡單的SqlHelper也好, 還是帶有Mapping過的Classes也好, 應該在一定的抽象程度上做到系統無關

#4. 不管使用COM+(Enterprise Service), 還是Remoting, 還是WebService之類的遠端物件技術, 不管部署的時候是不是真的分別部署到不同的伺服器上, 最起碼在設計的時候要做這樣的考慮, 更遠的, 還得考慮多台伺服器通過負載平衡作集群

所以考慮一個項目是不是應該應用三層/多層設計時, 先得考慮下是不是真的需要? 實際上大部分程式就開個WebApplication就足夠了, 完全沒必要作的這麼複雜. 而多層結構, 是用來解決真正複雜的專案需求的。

MVC的差異

MVC(模型Model-視圖View-控制器Controller)是一種設計模式,我們可以用它來建立在網域物件和UI表示層物件之間的區分。

同樣是架構層級的,相同的地方在於他們都有一個表現層,但是他們不同的地方在於其他的兩個層。

在三層架構中沒有定義Controller的概念。這是我認為最不同的地方。而MVC也沒有把業務的邏輯存取看成兩層,這是採用三層架構或MVC搭建程式最主要的區別。當然了。在三層中也提到了Model,但是三層架構中Model的概念與MVC中Model的概念是不一樣的,「三層」中典型的Model層是以實體類別構成的,而MVC裡,則是由業務邏輯與存取資料組成的。

以上是java三層架構原理與作用的總結(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 完美數指南。這裡我們討論定義,如何在 Java 中檢查完美數?

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 隨機數產生器指南。在這裡,我們透過範例討論 Java 中的函數,並透過範例討論兩個不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。這裡我們透過範例討論簡介、如何使用 weka java、平台類型和優點。

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 史密斯數指南。這裡我們討論定義,如何在Java中檢查史密斯號?帶有程式碼實現的範例。

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

See all articles