Java Web應用的代碼分層

Java Web應用的代碼分層

三層架構

在軟件體系架構設計中,分層式結構是最常見,也是最重要的一種結構。微軟推薦的分層式結構一般分為三層,從下至上分別為:數據訪問層、業務邏輯層(又或稱為領域層)、表示層。這也是Java Web中重要的三層架構中的三個層次。區分層次的目的即為了“高內聚低耦合”的思想。

MVC

MVC(模型Model-視圖View-控制器Controller)是一種架構模式,可以用它來創建在域對象和UI表示層對象之間的區分。


image.png

區別

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

在三層架構中沒有定義Controller的概念。這是最不同的地方。而MVC也沒有把業務的邏輯訪問看成兩個層,這是采用三層架構或MVC搭建程序最主要的區別。

分層的最佳實踐

隨著網站的用戶量的不斷提升,系統架構也在不斷的調整。有時候,隨著業務越來越復雜,有時候三層架構好像不夠用了。比如,我們的應用除了要給用戶提供頁面訪問以外,還需要提供一些開放接口,供外部系統調用。這個接口既不屬于界面層,也不應該屬于業務邏輯層,因為他還可能包含一些和業務邏輯無關的處理,如權限控制、流量控制等。
還有,隨著微服務的盛行,我們應用中可能要依賴很多外部接口或第三方平臺。這部分代碼放下業務邏輯層和數據訪問層也都不合適。

所以,漸漸的,在三層架構的基礎上,系統架構的分層變得更加復雜了。也正是因為復雜,就非??简灱軜嬙O計能力,因為層次劃分的不好,很可能會影響后面的開發,給代碼維護帶來很大的困難。

下圖,是阿里巴巴(參考《阿里巴巴Java開發手冊》)提倡的應用分層結構:


image.png

開放接口層

可直接封裝 Service 方法暴露成 RPC 接口;通過 Web 封裝成 http 接口;進行網關安全控制、流量控制等。

終端顯示層

各個端的模板渲染并執行顯示的層。當前主要是 velocity 渲染,JS 渲染,JSP 渲染,移動端展示等。

Web 層

主要是對訪問控制進行轉發,各類基本參數校驗,或者不復用的業務簡單處理等。

Service 層

相對具體的業務邏輯服務層。事務處理層。

Manager 層

通用業務處理層,它有如下特征: 1) 對第三方平臺封裝的層,預處理返回結果及轉化異常信息; 2) 對 Service 層通用能力的下沉,如緩存方案、中間件通用處理; 3) 與 DAO 層交互,對多個 DAO 的組合復用。

DAO 層

數據訪問層,與底層 MySQL、Oracle、Hbase 等進行數據交互。

外部接口或第三方平臺

包括其它部門 RPC 開放接口,基礎平臺,其它公司的 HTTP 接口。

異常處理往上拋

DAO層產生的異常類型可能有很多,可能是SQL相關的異常,也可能是數據庫連接相關的異常。這一層的處理方式可以簡單一點,直接try-catch(Exception),然后封裝成DAOException拋給上一層。這一層一般不需要打印日志,交給Service或者Manager層來打印。

Manager/Service層首先,對于DAO層拋上來的異常一定要捕獲的,并且記錄日志打印現場。這兩層發生的異??梢愿鶕闆r決定是繼續向上拋還是自己處理掉。如果是自己可以處理的異常,就捕獲,打日志,然后通過ErrorCode等方式返回給上一層。如果是自己無法處理或者不知道該如何處理的異常,就直接拋給上一層來處理。

Web 層和外部接口或第三方平臺層不可以拋出異常,需要返回友好提示或者友好錯誤界面,并且記錄好日志方便日后排查。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 摘錄自:http://www.cnblogs.com/zx3707/p/5708486.html DAO層:DAO...
    不會積閱讀 4,653評論 0 1
  • 1.導入框架 import <CoreLocation/CoreLocation.h> 2.定義對象 @prope...
    怪獸密保閱讀 1,423評論 0 1
  • 往事如回放的電影,清晰可見,伸手可觸。清晰的美好和糾纏,充滿焦慮急促,壓抑和掙扎。重復的旋律,一再的糾結,漸...
    笑的眼角閱讀 88評論 0 0
  • 他走后,我仿佛從一片充斥著紫色光斑的夢境中醒來,極目盡是迷離的婆娑笑眼。 心臟沉重地往下墜,剩下空洞無望的回響。 ...
    南逢酒館閱讀 232評論 0 0
  • 有些人成為了我們曾經走過的路,幫助我們成長。是回憶,是歷練。 而有些人是我們生命中的星星,在黑暗夜空照亮我們前行。...
    陽光貝拉閱讀 286評論 0 4