天天看點

雲栖大講堂Java基礎入門(三)- 阿裡巴巴Java開發手冊介紹

本文帶大家簡單了解阿裡巴巴Java開發手冊中的規約内容以及P3C項目,可以幫助開發者掃描出所有潛在的代碼隐患。在中間也聊了一些對于不同語言設計的了解,如何去看待語言的設計,其實是我們去學習一個語言的核心。

演講嘉賓簡介:

澳明,阿裡巴巴進階開發工程師。

本次直播視訊精彩回顧,戳這裡! PPT下載下傳 以下内容根據演講嘉賓視訊分享以及PPT整理而成。 本次的分享主要圍繞以下三個方面:

一、手冊簡介

二、聊聊語言

三、P3C項目

下面主要從三個方面介紹阿裡巴巴為什麼需要這個Java開發手冊。第一個方面,其實是協作效率的問題。衆所周知,秦朝統一時期,推出了“車同軌,書同文”的法令,事實上,這個法令背後的目的是讓整個國家人民做事的方式進行統一。那麼在現在,比如對于一個公司而言,一些規範的不一緻可能會導緻很多問題,不僅僅是個人與個人之間,甚至讓部門與部門之間會出現不必要的溝通損耗和溝通壁壘。

第二個方面其實是在系統品質方面。在阿裡巴巴,這種不規範編碼導緻的線上故障非常非常多,在整個線上故障的比率也非常高。是以,阿裡巴巴希望能夠統一整個集團的編碼規範,進而能夠提升整體的系統品質。

第三個方面,工匠精神。阿裡巴巴希望工程師們具備一個工匠精神。即希望工程師非常非常認真的對待編碼過程及編碼産物。因為無論怎麼樣設計Java開發手冊,它所包含的條目始終是有限的,是一個死的東西,更多的希望大家能夠體會的是Java開發手冊背後的思想,因為背後的思想其實是可以舉一反三,靈活運用的。阿裡巴巴希望工程師們可以具備這樣一種工匠精神,能夠不斷的認真打磨好自己的代碼。

雲栖大講堂Java基礎入門(三)- 阿裡巴巴Java開發手冊介紹

目前,Java開發手冊分為七大部分,下圖中的七大部分在日常的開發中是非常通用的。大家可以依據這七條規約,逐漸逐漸的從第一條規約低階往高階去進展。與大家平時開發項目一樣,比如說,在最開始編碼時,可以參考程式設計規約;然後我們在程式設計過程中,考慮異常場景時,那麼可以考慮異常日志規約;在寫單元測試時,可以參考單元測試規約;比如說,在整體的架構設計完畢并且代碼開發完畢之後,對于其非功能性需求,比如安全方面的問題,可以參考安全規約;那麼在與資料庫進行互動時,可以參考MySQL資料庫規約;有的時候,在整個一個大的公司内部,希望大家的工程結果能夠統一,這樣的話大家在閱讀别人的代碼,或者說複用别人的代碼的時候會非常的直覺和友善,這時候可以參考工程規約;最後一個設計規約,指在設計軟體,設計程式和設計架構時可以參照一些規約。

雲栖大講堂Java基礎入門(三)- 阿裡巴巴Java開發手冊介紹

盡管我們的Java開發手冊頁數不是很多,之是以稱之為手冊,是希望大家友善閱讀,可以當做枕邊書,業餘時間翻一翻。手冊中除了一些制定的規約内容,還提到了很多工程師會遇到的問題場景。這些問題場景中有一部分也結合了阿裡巴巴近年來的真實案例,目的是讓大家能夠更好的了解規約,更重要的是了解規約背後的所展現的思想。這本Java開發手冊雖然不厚,但是相信對于剛入門學習Java的同學,可以嘗試閱讀并體會,肯定會對大家有所幫助,并在程式設計規範的形成上有很大提高。

1.面向對象語言與面向過程語言的差別

大家應該知道Java是面向對象的語言,也叫做OOP。那麼面向對象語言和面向過程的語言有什麼差別呢?在實作某個動作時,無論是使用面向對象語言或者面向過程的語言都可以實作,那麼為什麼說面向過程比較直覺,比較友善呢?下面來簡單舉例說明。首先确定需求,比如說想開一個門,在面向過程的程式設計裡,很有可能是一個Open行為或者叫Open函數的一個動作的實作,然後Open依賴的資料結構是Door對象,那麼這個開門的動作就非常簡單,直接Open the door。在面向對象的程式中,直接将對象Door設計出來,然後在賦予對象一些行為,如Open。

Open the door,這是面向過程的代碼,可以認為Door其實是一個資料結構,我們可以很友善的再添加面向過程的代碼,如添加新函數,比如Close the door。那麼在面向對象的代碼中,更多的是在不同的資料結構中,實作Open這一功能。簡而言之,面向對象的語言更希望把操作的行為附加在不同的抽象類之上。

下圖中摘抄了我們的一本書,《代碼整潔之道》中的一段話“面向過程的代碼便于在不改動既有資料結構的前提下添加函數,面向對象代碼便于不改動既有函數的前提下添加類。反之,過程式代碼難以添加新資料結構,面向對象代碼難以添加新函數,因為必須修改所有類。對于面向對象比較南的事情,對于面向過程的代碼比較容易,反之亦然。”

雲栖大講堂Java基礎入門(三)- 阿裡巴巴Java開發手冊介紹
2.異常行為

我們相信大多數開發者都可以寫出能夠正常運作的代碼,這是大家非常非常擅長做的事情。但是并不是所有的開發者都能夠把異常處理的非常非常好。因為大家喜歡寫按既定的流程能夠正确執行的程式,但往往忽略了很多異常的情況。下面帶大家從Java語言方面嘗試了解一下它是如何對于異常行為進行抽象和設計的。舉個簡單例子,從旅遊坐飛機說起,正常的流程應該是坐飛機起飛,那麼想象一下中途有哪些異常場景出現。第一種情況,機場被恐怖份子襲擊發生爆炸,雖然機率非常低,但也有可能發生。這種情況相當于發生非常嚴重的錯誤,對應在平時開發過程中,其實是系統級别的異常,比如磁盤壞掉,機器宕掉,網絡斷掉。第二種,假設機場是OK的,但是在去機場的路上,突然之間道路出現擁堵的情況,本來30分鐘的路程,額外增加了1個小時的時間,是以必須換成其他交通工具趕到機場。這種相當于程式設計時異常,這類異常是可以有一些補救的措施的,如剛剛的場景中換成其他交通工具,進而繼續讓程式表現出我們理想的行為。系統異常與之不同的是,系統異常場景中開發者是沒有補救方法的,幾乎是無能為力的。第三種情況,假設順利到達機場,但是護照被拒簽無法登機,與上面幾種異常不同的是,這種護照被拒簽是可以被預測到的,大家都知道是有這種可能的,這種異常場景叫做預檢時場景。最後一種,在登機口準備登機時掃描器發生故障,雖然這種異常也算作突發異常,但是是可以登機的。因為這種異常最終會以一種資訊方式讓機場的維修師會來解決,或者換另一個登機口登機,這類異常叫做可透出異常。

在Java中出現的異常其實可以對上上面的四種異常。首先,第一層級會被抽象為錯誤和異常,然後異常分為檢查異常和未檢查異常。大家如果把Java中的異常跟圖中的異常進行結合,相信大家會有一些新的輸入和了解。

雲栖大講堂Java基礎入門(三)- 阿裡巴巴Java開發手冊介紹

大家可能會困惑P3C到底是什麼?實際上,P-3C是世界知名反潛機,它有美國克洛希德公司在民用客機的基礎上改進而來,綽号“獵戶”。“獵戶”誕生至今已經40多年了,盡管是一員老将,但在海灣戰争中,它還是披挂上陣,為多國部隊提供了大量情報。因為它是非常經典的反潛機,是以阿裡巴巴也以它作為項目的代号,其中的寓意是以Java開發手冊為前提掃描出所有潛在的代碼隐患。那麼阿裡巴巴為何要成立這個項目?主要原因是因為如果單純地制定了Java開發手冊裡面的一些規範,它其實是類似于意識形态上的東西,飄在空中,通過口頭傳達這些規範很難落地,仍然無法保證在開發過程中,不會再犯此類錯誤。是以在阿裡巴巴内部,當時成立了P3C項目組,希望依托于Java開發手冊,能夠把内容,以及平時的掃描,還有IDE進行一些內建的工作,進而讓我們的開發人員能夠保證遵循我們的Java開發手冊進行工作。

下圖中給出了P3C項目位址,放在了Github上。其中主要包含三個部分,第一部分是就是開發手冊的掃描問題的實作,是基于PMD實作的。第二部分是IntelliJ IDEA plugin,是一個Java IDE的插件。第三部分是Eclipse的插件。插件的部分會實時的在開發過程中,掃描出的代碼中不滿足Java開發手冊内容的一些代碼。

P3C項目目前非常火爆,在剛剛宣布了開源之後,整個社群活躍度是非常之高的。推薦大家也通路一下P3C項目,首先大家可以下載下傳都自己的IDE中內建起來,這樣會對大家平時編碼的規範性有個很好的督促作用,另外這裡也給出了Java開發手冊的線上免費下載下傳版本和淘寶購買位址。

雲栖大講堂Java基礎入門(三)- 阿裡巴巴Java開發手冊介紹
本文由雲栖志願小組董黎明整理,編輯百見
上一篇: 契約
下一篇: V3.3.1釋出