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

這篇文章主要對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
為什麼Java是開發跨平台桌面應用程序的流行選擇?為什麼Java是開發跨平台桌面應用程序的流行選擇?Apr 25, 2025 am 12:23 AM

javaispopularforcross-platformdesktopapplicationsduetoits“ writeonce,runany where”哲學。 1)itusesbytiesebyTecodeThatrunsonAnyJvm-備用Platform.2)librarieslikeslikeslikeswingingandjavafxhelpcreatenative-lookingenative-lookinguisis.3)

討論可能需要在Java中編寫平台特定代碼的情況。討論可能需要在Java中編寫平台特定代碼的情況。Apr 25, 2025 am 12:22 AM

在Java中編寫平台特定代碼的原因包括訪問特定操作系統功能、與特定硬件交互和優化性能。 1)使用JNA或JNI訪問Windows註冊表;2)通過JNI與Linux特定硬件驅動程序交互;3)通過JNI使用Metal優化macOS上的遊戲性能。儘管如此,編寫平台特定代碼會影響代碼的可移植性、增加複雜性、可能帶來性能開銷和安全風險。

與平台獨立性相關的Java開發的未來趨勢是什麼?與平台獨立性相關的Java開發的未來趨勢是什麼?Apr 25, 2025 am 12:12 AM

Java將通過雲原生應用、多平台部署和跨語言互操作進一步提昇平台獨立性。 1)雲原生應用將使用GraalVM和Quarkus提升啟動速度。 2)Java將擴展到嵌入式設備、移動設備和量子計算機。 3)通過GraalVM,Java將與Python、JavaScript等語言無縫集成,增強跨語言互操作性。

Java的強鍵入如何有助於平台獨立性?Java的強鍵入如何有助於平台獨立性?Apr 25, 2025 am 12:11 AM

Java的強類型系統通過類型安全、統一的類型轉換和多態性確保了平台獨立性。 1)類型安全在編譯時進行類型檢查,避免運行時錯誤;2)統一的類型轉換規則在所有平台上一致;3)多態性和接口機制使代碼在不同平台上行為一致。

說明Java本機界面(JNI)如何損害平台獨立性。說明Java本機界面(JNI)如何損害平台獨立性。Apr 25, 2025 am 12:07 AM

JNI會破壞Java的平台獨立性。 1)JNI需要特定平台的本地庫,2)本地代碼需在目標平台編譯和鏈接,3)不同版本的操作系統或JVM可能需要不同的本地庫版本,4)本地代碼可能引入安全漏洞或導致程序崩潰。

是否有任何威脅或增強Java平台獨立性的新興技術?是否有任何威脅或增強Java平台獨立性的新興技術?Apr 24, 2025 am 12:11 AM

新興技術對Java的平台獨立性既有威脅也有增強。 1)雲計算和容器化技術如Docker增強了Java的平台獨立性,但需要優化以適應不同雲環境。 2)WebAssembly通過GraalVM編譯Java代碼,擴展了其平台獨立性,但需與其他語言競爭性能。

JVM的實現是什麼,它們都提供了相同的平台獨立性?JVM的實現是什麼,它們都提供了相同的平台獨立性?Apr 24, 2025 am 12:10 AM

不同JVM實現都能提供平台獨立性,但表現略有不同。 1.OracleHotSpot和OpenJDKJVM在平台獨立性上表現相似,但OpenJDK可能需額外配置。 2.IBMJ9JVM在特定操作系統上表現優化。 3.GraalVM支持多語言,需額外配置。 4.AzulZingJVM需特定平台調整。

平台獨立性如何降低發展成本和時間?平台獨立性如何降低發展成本和時間?Apr 24, 2025 am 12:08 AM

平台獨立性通過在多種操作系統上運行同一套代碼,降低開發成本和縮短開發時間。具體表現為:1.減少開發時間,只需維護一套代碼;2.降低維護成本,統一測試流程;3.快速迭代和團隊協作,簡化部署過程。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。