阿里巴巴 Java 開發手冊之工程分層

2021-01-19 小伍科技

版權歸屬:阿里巴巴集團技術團隊 著作目的:幫助更多軟體開發者搭建規範開發品臺,促進工程標準化

本文分享關於阿里巴巴Java 開發手冊使用內容的工程分層結構,為幫助大家搭建一個有規範性得應用結構。需要原PDF文檔的朋友可私信提供(小編有全套阿里《java開發手冊》各版本)。

工程結構分層

圖中默認上層依賴於下層,箭頭關係表示可直接依賴,如:開放接口層可以依賴於Web層,也可以直接依賴於Service層,依此類推:

開放接口層:可直接封裝Service接口暴露成RPC接口;通過Web封裝成http接口;網關控制層等。終端顯示層:各個端的模板渲染並執行顯示層。當前主要是velocity渲染,JS渲染,JSP渲染,移動端展示層等。Web層:主要是對訪問控制進行轉發,各類基本參數校驗,或者不復用的業務簡單處理等。Service層:相對具體的業務邏輯服務層。Manager層:通用業務處理層,它有如下特徵: 1) 對第三方平臺封裝的層,預處理返回結果及轉化異常信息; 2) 對Service層通用能力的下沉,如緩存方案、中間件通用處理; 3) 與DAO層交互,對DAO的業務通用能力的封裝。DAO層:數據訪問層,與底層MySQL、Oracle、Hbase進行數據交互。外部接口或第三方平臺:包括其它部門RPC開放接口,基礎平臺,其它公司的HTTP接口。

分層異常處理規約

在DAO層,產生的異常類型有很多,無法用細粒度異常進行catch,使用catch(Exception e)方式,並throw new DAOException(e),不需要列印日誌,因為日誌在Manager/Service層一定需要捕獲並打到日誌文件中去,如果同臺伺服器再打日誌,浪費性能和存儲。在Service層出現異常時,必須記錄日誌信息到磁碟,儘可能帶上參數信息,相當於保護案發現場。如果Manager層與Service同機部署,日誌方式與DAO層處理一致,如果是單獨部署,則採用與Service一致的處理方式。Web層絕不應該繼續往上拋異常,因為已經處於頂層,無繼續處理異常的方式,如果意識到這個異常將導致頁面無法正常渲染,那麼就應該直接跳轉到友好錯誤頁面,儘量加上友好的錯誤提示信息。開放接口層要將異常處理成錯誤碼和錯誤信息方式返回。

分層領域模型規約:

DO(Data Object):與資料庫表結構一一對應,通過DAO層向上傳輸數據源對象。DTO(Data Transfer Object):數據傳輸對象,Service和Manager向外傳輸的對象。BO(Business Object):業務對象。可以由Service層輸出的封裝業務邏輯的對象。QUERY:數據查詢對象,各層接收上層的查詢請求。註:超過2個參數的查詢封裝,禁止使用Map類來傳輸。VO(View Object):顯示層對象,通常是Web向模板渲染引擎層傳輸的對象。

更多精彩內容,關注小伍

相關焦點

  • 孤盡獨家解讀《Java開發手冊》,速來預約!
    《Java開發手冊》據首次發布第四年了,歷經了1300+個日夜的創作和修訂,經典升級回歸,阿里巴巴《Java開發手冊(嵩山版)》昨天重磅首發,新增前後端規約等內容,並大幅度修正泰山版出現的問題,至此集齊了Java開發版塊裡所有的主幹內容。嵩山版發布第一天,來下載電子版的同學數不勝數,Java開發者們已經霸屏評論區了。
  • Java開發手冊認證考試的50題
    多選 3.下列哪些說法符合《阿里巴巴Java開發手冊》:ACDA .對於「明確停止使用的代碼和配置」,如方法、變量、類、配置文件、動態配置屬性等要堅決從程序中清理出去,避免造成過多垃圾。B .永久棄用的代碼段注釋掉即可,即不用加任何注釋。
  • 對話孤盡、鳴莎:《碼出高效:Java開發手冊》背後的故事
    《碼出高效:Java開發手冊》背後的故事2017年開春之際,阿里發布了《阿里巴巴Java開發手冊》,首次公開了阿里官方Java代碼規範標準,迄今為止,共發布9個版本,不斷精進,引起業界駐足觀看和廣泛熱議。那麼,為什麼這本書的名字中也包含「Java開發手冊」,「碼出高效」又蘊含著怎樣的含義呢?
  • 優秀的代碼都是如何分層的?
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫1、背景說起應用分層,大部分人都會認為這個不是很簡單嘛 就controller,service, mapper三層。
  • 阿里發布《Java開發手冊(泰山版)》
    最近,阿里的《Java開發手冊》又更新了,這個版本歷經一年的修煉,取名:《Java開發手冊(泰山版)》正式出道。正所謂無規矩不成方圓,在程式設計師的世界裡,也存在很多規範,阿里出版的Java開發手冊就是其中之一,從各個方面都約束了程式設計師該如何有規矩的寫代碼,以及如何寫好代碼。
  • Java你只會HelloWord?入門到精通很容易,成為技術大牛不是夢
    書中所有知識都結合具體實例進行講解,設計的程序代碼給出了詳細的注釋,可以使讀者輕鬆領會Java程序開發的精髓,快速提高開發技能。《零基礎學Java》圖書與《小白實戰手冊》+光碟+二維碼+明日學院,實現立體化、全面體系的教學模式,拉低編程門檻,讓零基礎者輕鬆跨入Java編程。點擊下方的卡片查看書籍詳情。
  • 學習java開發可以做什麼工作
    打開APP 學習java開發可以做什麼工作 程式設計師小皮 發表於 2020-02-17 13:41:48 在現實生活中,大多數人選擇java開發這個行業都是看好java的發展前景,那麼java學好了之後可以做些什麼呢?
  • 十幾年Java開發資深工程師手打一份高級知識手冊
    這份純手打的Java高級核心知識點是一位螞蟻金服的P9工作閒暇之餘手打的一份手冊,其內容全部是他工作的經驗總結,可謂是全天下獨一份的存在。這份Java高級核心知識點涉及Java、網絡、Linux 、數據結構與算法、資料庫、系統設計、必會工具、面試指南。
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    零基礎學Java主流開發語言根據最新2020年TIOBE程式語言指數排行榜,Java仍然排名前三位。軟體開發可以使用的語法是非常多,但是為什麼Java被廣泛的使用呢?其他程式語言與Java相比,Java語法相對簡單,並且是很多計算機語言的基礎。提到C++語言,很多人發現在使用過程中最容易出現的錯誤就是內存管理,而java有自動垃圾回收器,不用擔心內存。
  • Javaweb開發學習路線及Java三大框架分享
    Java web開發是什麼?Java web開發,是用Java技術來解決相關web網際網路領域的技術總和。web包括:web伺服器和web客戶端兩部分。Java在客戶端的應用有java applet,不過使用得很少,Java在伺服器端的應用非常的豐富,比如Servlet,JSP和第三方框架等等。Java技術對Web領域的發展注入了強大的動力。
  • java-web新手開發快速入門
    java-web開發快速入門,本文對於java-web開發的要點進行了重點分析,可以給新手們提供很好的參考作用。一、Tomcat伺服器常見啟動問題:(1).Java_home環境變量,由於tomcat伺服器的bin目錄中的一些jar文件必須使用到java類庫,所以必須先配置Java_home環境變量。(2).埠佔用問題(3).Catalina_home環境變量的問題,如果配置了catalina_home環境變量,則默認啟動的是catalina_home所指向的tomcat伺服器。
  • 用eclipse3.62開發第一個java程序
    3.用eclipse3.62開發第一個java程序:使用eclipse之前們需要先配置一下jdk。window/preference/java/installed JREs,詳細請見視頻。在eclipse3.62中:馬克- to-win:馬克 java社區:防盜版實名手機尾號: 73203。由於篇幅限制,想獲取更多內容,百度搜索"馬克java社區",本文轉載自【微信公眾號:馬克java社區】經微信公眾號授權轉載,如需轉載與原文作者聯繫。
  • 中建最新版土建部分質量通病防治手冊,8大工程圖文並茂,可下載
    但這些質量通病都是可以防治的,中建單位出品的質量通病防治手冊對於工程人來說還是很有借鑑意義的。這份中建最新版土建部分質量通病防治手冊,包括灌注樁工程、防水工程、鋼筋工程、模板工程、混凝土工程等通病防治,圖文並茂,內容全面,問題+分析+措施三合一的形式,指導和借鑑意義非常強。
  • 黑馬程式設計師Java學習的六大要點
    java中大量應用了靜態方法和屬性,這是一個通常的技巧。但是這種技巧在很多語言中不被頻繁地使用。理解靜態方法和屬性對於理解類與對象的關係是十分有幫助的,在大量的java規範中,靜態方法和屬性被頻繁使用。因此學習者應該理解靜態方法和屬性。Java在方法和屬性的調用上是一致的,區別只表現在聲明的時候,這和c++是不同的。2.重視接口在面向對象早期的應用中大量使用了類繼承。
  • Java 入門教程詳解
    Java 在線工具JDK 1.6 在線中文手冊我的第一個JAVA程序以下我們通過一個簡單的實例來展示 Java 編程,創建文件 HelloWorld.java(文件名需與類名一致), 代碼如下:實例public class HelloWorld { public
  • Java開發之log日誌的使用儘量不用e.printStackTrace
    前言在Java開發中,無論是運行還是調試,一般都會對異常進行處理,一則明確問題出在哪個地方,一則也是代碼完整性的一部分。談到log日誌,小編建議初學java的朋友使用框架集成的log4j、logback這類統一列印日誌,儘量不使用catch的e.printStackTrace(),為什麼呢?下面我們來做簡單介紹。為什麼儘量不用e.printStackTrace直接用e.printStackTrace來列印日誌有錯嗎?當然不錯,但是不好。
  • 給Java新手的一些建議——Java知識點歸納(Java基礎部分)
    JVM作為java運行的基礎,很難相信對於JVM一點都不了解的人可以把java語言吃得很透。我在面試有超過3年Java經驗的開發者的時候, JVM幾乎就是一個必問的問題了。當然JVM不是唯一決定技術能力好壞的面試問題,但是可以佐證java開發能力的高低。
  • Java和.NET開發過程中的不同
    用.NET平臺下的C#語言開發了比較長一段時間,最近項目開始用JAVA來開發了,本文通過自己開發過程中的一些感受說下它們在具體開發過程的不同點,由於經驗知識還有限,本篇文章只能從比較表面的以及自己常用的功能點來說明我所看到的不同點。  我是用VS2008和VS2010開發。
  • 學習java開發,選擇學習機構應該從哪幾個方面衡量好壞-開課吧
    對於那些想入行Java開發或者轉行Java開發的朋友來說!培訓確實是一個比較快速入門並且就業的途徑!毫無疑問,現在市場上越來越多的培訓機構!Java作為一個比較熱門並且高薪的行業來說。培訓班是比較多的,那麼如何挑選培訓班呢?
  • java大數據和python大數據的全面對比,哪個更主流?
    java大數據與python大數據說到java編程,java工程師一直都是同行的高薪崗位,而python是從最初的2016人工智慧開始爆發,從而在短短兩年之內能趕超java。隨著python的發展,最大贏家無疑是python。