在Javaweb中如何體現三層架構思想?

仲小九929


我覺得這個三層架構是個不同階段理解不同的概念。

我們最開始做項目的時候,對於java而言就是servlet、jsp之流(像.net等應該就是asp或者asp.net),甚至直接將業務邏輯寫在jsp頁面裡面,沒有什麼層的概念,一個jsp就打天下了。開發時爽的不行,連上數據庫,curd搞起來,數據頁面一綁定,我們就萬事大吉了,幹他什麼業務變更,業務擴展呢,那是leader的事,和我有什麼關係。

然後悲劇就開始發生了,我們的產品很快找到了老大,我們最近業務要擴展了,我們一想這還不簡單,直接在頁面上加鏈接,加新的jsp頁面就行了,說幹就幹,繼續在jsp裡面翻雲覆海,很快搞定了,這樣的事情在一年內發生了百次以上,之後產品找到老大,說我們的計算方式變化了,頁面不變,但是數據都不對了,我們需要重寫下業務計算的方式,一部分還是原來的邏輯,一部分變更成新的,這下我們就犯難了,這上百個jsp,每個裡面都是大量的邏輯,數據庫查詢,修改等操作,這怎麼把業務按數據拆分開啊,最終直接刪代碼跑路嘍。。。

剛才廢了好多話就是想描述下在三層架構沒有流行起來前開發的模式和弊端,工筆不好,大家見諒吧,總體想表達的也就是三層架構為什麼要出現,解決的是什麼問題。


我先上定義:

三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用劃分為:界面層(User Interface layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data access layer)。區分層次的目的即為了“高內聚低耦合”的思想。在軟件體系架構設計中,分層式結構是最常見,也是最重要的一種結構。微軟推薦的分層式結構一般分為三層,從下至上分別為:數據訪問層(又稱為持久層)、業務邏輯層(又或稱為領域層)、表示層。

表示層(UI層): 表示層也稱為界面層,位於最外層(最上層),離用戶最近。用於顯示數據和接收用戶輸入的數據,為用戶提供一種交互式操作的界面。

業務邏輯層(BLL層): 負責關鍵業務的處理和數據的傳遞。複雜的邏輯判斷和涉及到數據庫的數據驗證都需要在此做出處理。主要是針對具體的問題的操作,也可以理解成對數據層的操作,對數據業務邏輯處理,如果說數據層是積木,那邏輯層就是對這些積木的搭建。

數據訪問層(DAL層): 主要負責對數據庫的直接訪問,為業務邏輯層提供數據,根據傳入的值來操作數據庫,增、刪、改、查。

說白了就是一句話,把上面我說的那100多個jsp頁面裡面的業務邏輯抽取出來,按角色分成上面的三層。

這樣就可以讓我們的代碼達到“高內聚,低耦合”的目的,每層需要修改不會影響其他層,便於發現和改正BUG。還有比較關鍵的一點是代碼的複用和勞動成本的減少,分層的最理想化的結果是實現層與層之間的互不依賴的內部實現,所謂的即插即用!

我覺得最重要的一點是便於團隊開發過程中的管理,三層架構使得合作開發成為可能,由於各層相互獨立,一個小組只需負責一小塊就可以。結構化的編程方法面對大型的項目會感到力不從心,因為結構化設計必定會使程序變的錯綜複雜。邏輯主要在BLL層,就使得UI層也就是客戶端不承擔太多的職責,即使更新業務邏輯,也無需修改客戶端,不用重新部署。


擦,寫了這麼多才發現我回答錯了主題,題主想問的是如何更好的體現,哎算了,不改了,發出去就算幫題主加個熱度吧....


唯一胡小然


一個非常好的問題。三層或者多層架構的核心思想是分層,不同粒度和維度都有應用。


一,系統架構

常見的動靜分離、數據中臺、微服務在一定程度上都是將系統實現進行分層解耦,從而使得系統表現為不同的層次,比如典型的前端頁面展示、接口服務、數據存儲。

二,前端架構

以典型的Ant Design開發信息管理系統為例,將前端實現分為Page、Model、Service三層,Page展示頁面響應用戶操作,Model保存數據,Service處理業務邏輯、調用後臺服務接口。


三,後端架構

在後端開發中,仍然會採用分層架構。比如常用的Java + Spring Boot框架開發Web服務時,有Controller,Service,Entity,分別封裝



急速馬力快de源碼控


數據訪問層:

數據訪問層又稱為DAL層,有時候也稱為是持久層,其功能主要是負責數據庫的訪問,進行讀取數據和傳遞數據。

簡單的說,就是通過DAL對數據庫進行的SQL語句等操作,實現對數據表的Select(查詢),Insert(插入),Update(更新),Delete(刪除)。如果要加入ORM的元素,那麼就會包括對象和數據表之間的mapping,以及對象實體的持久化。。

業務邏輯層:

業務邏輯層負責系統領域業務的處理,負責邏輯性數據的生成、處理及轉換。對所輸入的邏輯性數據的正確性及有效性負責,但對輸出的邏輯性數據及用戶性數據的正確性不負責,對數據的呈現樣式不負責。

用於做一些有效性驗證的工作,以更好地保證程序運行的健壯性。如完成數據添加、修改和查詢業務等;不允許指定的文本框中輸入空字符串,數據格式是否正確以及數據類型驗證;用戶權限的合法性判斷等;通過以上的諸多判斷以決定是否將操作繼續向後傳遞,儘量保證程序的正常運行。

表示層:

負責整個頁面的呈現樣式。


分享到:


相關文章: