成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java Web應用的代碼分層最佳實踐

開發 開發工具 后端
代碼分層,對于任何一個Java Web開發來說應該都不陌生。一個好的層次劃分不僅可以能使代碼結構更加清楚,還可以使項目分工更加明確,可讀性大大提升,更加有利于后期的維護和升級。

代碼分層,對于任何一個Java Web開發來說應該都不陌生。一個好的層次劃分不僅可以能使代碼結構更加清楚,還可以使項目分工更加明確,可讀性大大提升,更加有利于后期的維護和升級。

從另外一個角度來看,好的代碼分層架構,應該是可以很好的匹配上單一職責原則的。這樣就可以降低層與層之間的依賴,還能***程度的復用各層的邏輯。本文就來介紹下Java Web項目的代碼到底應該如何分層。

[[228893]]

三層架構

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

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

數據訪問層

主要是對非原始數據(數據庫或者文本文件等存放數據的形式)的操作層,而不是指原始數據,也就是說,是對數據庫的操作,而不是數據,具體為業務邏輯層或表示層提供數據服務。

業務邏輯層

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

界面層

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

三層架構與MVC的區別

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

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

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

分層的***實踐

隨著網站的用戶量的不斷提升,系統架構也在不斷的調整。有時候,隨著業務越來越復雜,有時候三層架構好像不夠用了。比如,我們的應用除了要給用戶提供頁面訪問以外,還需要提供一些開放接口,供外部系統調用。這個接口既不屬于界面層,也不應該屬于業務邏輯層,因為他還可能包含一些和業務邏輯無關的處理,如權限控制、流量控制等。

還有,隨著微服務的盛行,我們應用中可能要依賴很多外部接口或第三方平臺。這部分代碼放下業務邏輯層和數據訪問層也都不合適。

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

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

開放接口層

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

終端顯示層

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

Web 層

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

Service 層

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

Manager 層

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

DAO 層

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

外部接口或第三方平臺

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

 

事務處理

在了解了分層之后,我們再來看一下寫Java Web代碼的時候,大家比較關心的一個問題,那就是涉及到數據庫操作的時候,事務處理應該在哪一層控制呢?

關于這個問題,仁者見仁,智者見智。作者認為,事務處理應該放在Service層和Manager層。

DAO層不應該有事務,應該只是很純的 CRUD 等比較通用的數據訪問方法。一個DAO應該只處理和自己相關的操作,不要有任何組合。組合的事情交給上層。

Service層和Manager層一般會組合多個DAO的CRUD操作,例如:在注冊一個用戶的時候需要往日志表里 INSERT 日志,那么就在 Service 層構造事務,在該事務中調用 Dao 層的 User.Insert () 與 Log.Insert ()。

異常處理

異常處理是Java中比較重要的一個話題,在《Effective Java》中有很多關于異常處理的***實踐,這里不詳細介紹了,本文主要簡單說一下在應用代碼分層之后,各個層次之間的異常應該如何處理,是自己捕獲,還是向上一層拋出。

首先,每一層都是可能發生異常的。由于每一層的職責都不通,處理方式也可能有差別。

DAO層

在 DAO 層,產生的異常類型可能有很多,可能是SQL相關的異常,也可能是數據庫連接相關的異常。

這一層的處理方式可以簡單一點,直接try-catch(Exception),然后封裝成DAOException拋給上一層。這一層一般不需要打印日志,交給Service或者Manager層來打印。

  1. try{ 
  2.    CRUD 
  3. }catch(Exception e){ 
  4.    throw new DAOException(e); 

Manager/Service

首先,對于DAO層拋上來的異常一定要捕獲的,并且記錄日志打印現場。

但是值得注意的是,如果是需要事務控制的方法,要注意捕獲到異常之后再向上拋一個新的異常,如 TransactionRolledbackException,否則事務無法回滾。

這兩層發生的異常可以根據情況決定是繼續向上拋還是自己處理掉。如果是自己可以處理的異常,就捕獲,打日志,然后通過ErrorCode等方式返回給上一層。如果是自己無法處理或者不知道該如何處理的異常,就直接拋給上一層來處理。

Web

首先,可以明確的一點:Web層不應該再往外拋異常,因為這一層一旦拋異常,就可能會導致用戶跳轉到不友好的錯誤頁面甚至看到錯誤信息等。

如果意識到這個異常將導致頁面無法正常渲染,那么就應該直接跳轉到友好錯誤頁面,加上用戶容易理解的錯誤提示信息。

開放接口層

這一層和Web層一樣,不可以拋出異常。一般通過ErrorCode和ErrorMessage反饋給外部調用方。

這一層,要自己處理好所有的異常,定義好ErrorCode,并記錄好日志,便于日后排查問題。

總結

本文主要介紹了Java Web項目中代碼分層的方案,通過分層之后可以使沒一層更加專注,解除耦合。并簡單介紹了一下分層之后的事務處理和異常處理的邏輯。

【本文是51CTO專欄作者Hollis的原創文章,作者微信公眾號Hollis(ID:hollischuang)】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2010-03-09 13:27:23

Web 2.0應用程序

2009-01-03 14:57:19

ibmdwLotusWeb2.0

2011-09-20 10:41:45

Web

2025-03-19 09:04:39

2012-08-09 09:10:56

代碼審查代碼

2018-01-12 14:37:34

Java代碼實踐

2020-06-12 07:00:00

Web開發項目

2010-11-26 09:36:41

移動互聯網移動Web界面Web站點

2009-08-20 09:41:36

2010-04-20 09:14:33

Struts

2014-03-19 14:34:06

JQuery高性能

2012-12-13 09:47:50

2015-09-23 09:08:38

java反射

2011-06-02 10:25:10

Web服務器部署

2015-06-10 10:18:27

WebAPP開發技巧

2014-11-19 10:08:47

2017-01-20 09:45:20

JavaScript代碼質量

2012-12-24 09:49:08

SaaSSaaS安全

2011-04-15 15:16:18

代碼編程

2009-07-29 17:52:29

ibmdwJava
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人性生活 | 国产1区2区| 欧洲av一区 | 国产高清精品一区二区三区 | 国产1区在线 | 亚洲精品大片 | av福利网 | 国产91精品久久久久久久网曝门 | 免费人成在线观看网站 | 国产探花在线精品一区二区 | 国产亚洲成av人片在线观看桃 | 成人午夜av| 国产精品一区二区福利视频 | 日本天天操| 中文字幕视频在线 | 日韩福利 | 亚洲狠狠丁香婷婷综合久久久 | 在线亚洲一区 | 天天爽天天操 | 一区二区三区亚洲精品国 | 日韩在线资源 | 欧美中文字幕一区 | 欧美在线视频一区二区 | 欧美不卡网站 | 大学生a级毛片免费视频 | 国产精品久久久久av | 91大神在线看 | 98成人网| 99久久免费观看 | 91精品久久久久久久久99蜜臂 | 国产a视频 | 成人激情视频在线观看 | 久久精品亚洲成在人线av网址 | 亚洲欧美在线一区 | 国产视频中文字幕 | 午夜视频在线视频 | 精品一二三区 | 日韩欧美在线视频 | 91精品国产乱码久久久久久久久 | 欧美成人一区二区三区片免费 | 中文日韩在线视频 |