JAVA程序員不可不留意的編碼規(guī)范

最近經(jīng)常看一些朋友寫(xiě)的源代碼,總是感覺(jué)編碼規(guī)范題目還沒(méi)有成為大家的關(guān)注點(diǎn),導(dǎo)致代碼的通用可讀性相對(duì)比較差;所以在此嘮叨幾句編碼規(guī)范(以struts2+spring2+hibernate3架構(gòu)的項(xiàng)目為例),大家各取所需,歡迎拍磚!

一、規(guī)范存在的意義

應(yīng)用編碼規(guī)范對(duì)于軟件本身和軟件開(kāi)發(fā)職員而言尤為重要,有以下幾個(gè)原因

  1. 好的編碼規(guī)范可以盡可能的減少一個(gè)軟件的維護(hù)本錢(qián) , 并且?guī)缀鯖](méi)有任何一個(gè)軟件,在其整個(gè)生命周期中,均由最初的開(kāi)發(fā)職員來(lái)維護(hù);
  2. 好的編碼規(guī)范可以改善軟件的可讀性,可以讓開(kāi)發(fā)職員盡快而徹底地理解新的代碼;
  3. 好的編碼規(guī)范可以最大限度的進(jìn)步團(tuán)隊(duì)開(kāi)發(fā)的合作效率;
  4. 長(zhǎng)期的規(guī)范性編碼還可以讓開(kāi)發(fā)職員養(yǎng)成好的編碼習(xí)慣,甚至鍛煉出更加嚴(yán)謹(jǐn)?shù)乃季S;

二、命名規(guī)范

(一)、一般概念

  1. 盡量使用完整的英文描述符
  2. 采用適用于相關(guān)領(lǐng)域的術(shù)語(yǔ)
  3. 采用大小寫(xiě)混合使名字可讀
  4. 盡量少用縮寫(xiě),但假如用了,必須符合整個(gè)工程中的同一定義
  5. 避免使用長(zhǎng)的名字(小于 15 個(gè)字母為正常選擇)
  6. 避免使用類(lèi)似的名字,或者僅僅是大小寫(xiě)不同的名字
  7. 避免使用下劃線(xiàn)(除靜態(tài)常量等)

(二)、標(biāo)識(shí)符類(lèi)型說(shuō)明

1. 包( Package )的命名

Package 的名字應(yīng)該采用完整的英文描述符,都是由一個(gè)小寫(xiě)單詞組成。并且包名的前綴總是一個(gè)頂級(jí)域名, 通常是 com、edu、gov、mil、net、org 等;

如:

com.yjhmily.test

2. 類(lèi)( Class )的命名

類(lèi)名應(yīng)該是個(gè)一名詞,采用大小寫(xiě)混合的方式,每個(gè)單詞的首字母大寫(xiě)。盡量保證類(lèi)名簡(jiǎn)潔而富于描述。

使用完整單詞,避免縮寫(xiě)詞 ( 除非工程內(nèi)有同一縮寫(xiě)規(guī)范或該縮寫(xiě)詞被更廣泛使用,像 URL , HTML)

如:

FileDescription

3. 接口( Intece )的命名*

基本與 Class 的命名規(guī)范類(lèi)似。在滿(mǎn)足 Classd 命名規(guī)則的基礎(chǔ)之上,保證開(kāi)頭第一個(gè)字母為 ”I”, 便于與普通的 Class區(qū)別開(kāi)。實(shí)在現(xiàn)類(lèi)名稱(chēng)取接口名的第二個(gè)字母到最后,且滿(mǎn)足類(lèi)名的命名規(guī)范;

如:

IMenuEngine

4. 枚舉( Enum )的命名

基本與 Class 的命名規(guī)范類(lèi)似。在滿(mǎn)足 Classd 命名規(guī)則的基礎(chǔ)之上,保證開(kāi)頭第一個(gè)字母為 ”E” , 便于與普通的 Class區(qū)別開(kāi)。

如:

EUserRole

5. 異常( Exception )的命名

異常( Exception ) 通常采用字母 e 表示異常,對(duì)于自定義的異常類(lèi),其后綴必須為 Exception

如:

BusinessException

6. 方法( Method )的命名

方法名是一個(gè)動(dòng)詞,采用大小寫(xiě)混合的方式,第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。

方法名盡可能的描述出該方法的動(dòng)作行為。返回類(lèi)型為 Boolean 值的方法一般由“ is ”或“ has ”來(lái)開(kāi)頭

如:

getCurrentUser() 
addUser()
hasAuthority()

7. 參數(shù)( Param )的命名

第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。參數(shù)目名不答應(yīng)以下劃線(xiàn)或美元符號(hào)開(kāi)頭, 固然這在語(yǔ)法上是答應(yīng)的。參數(shù)名應(yīng)簡(jiǎn)短且富于描述。

如:

public UserContext getLoginUser(String loginName);

8. 常量字段 ( Constants )的命名

靜態(tài)常量字段( static final ) 全部采用大寫(xiě)字母,單詞之間用下劃線(xiàn)分隔;

如:

public static final Long FEEDBACK;
public static Long USER_STATUS;

三、注釋規(guī)范

一個(gè)很好的可遵循的有關(guān)注釋的經(jīng)驗(yàn)法則是:

問(wèn)問(wèn)你自己,你假如從未見(jiàn)過(guò)這段代碼,要在公道的時(shí)間內(nèi)有效地明白這段代碼,你需要一些什么信息???

(一)、一般概念

  1. 注釋?xiě)?yīng)該增加代碼的清楚度
  2. 保持注釋的簡(jiǎn)潔
  3. 在寫(xiě)代碼之前或同時(shí)寫(xiě)注釋
  4. 注釋出為什么做了一些事,而不僅僅是做了什么

(二)、注釋哪些部分

  1. Java 文件:必須寫(xiě)明版權(quán)信息以及該文件的創(chuàng)建時(shí)間和作者;
  2. 類(lèi):類(lèi)的目的、即類(lèi)所完成的功能,以及該類(lèi)創(chuàng)建的時(shí)間和作者名稱(chēng);多人一次編輯或修改同一個(gè)類(lèi)時(shí),應(yīng)在作者名稱(chēng)處出現(xiàn)多人的名稱(chēng);
  3. 接口: 在滿(mǎn)足類(lèi)注釋的基礎(chǔ)之上,接口注釋?xiě)?yīng)該包含設(shè)置接口的目的、它應(yīng)如何被使用以及如何不被使用。在接口注釋清楚的條件下對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)可以不加注釋?zhuān)?/li>
  4. 方法注釋: 對(duì)于設(shè)置 (Set 方法 ) 與獲取 (Get 方法 ) 成員的方法,在成員變量已有說(shuō)明的情況下,可以不加注釋?zhuān)黄胀ǔ蓡T方法要求說(shuō)明完成什么功能,參數(shù)含義是什么且返回值什么;另外方法的創(chuàng)建時(shí)間必須注釋清楚,為將來(lái)的維護(hù)和閱讀提供寶貴線(xiàn)索;
  5. 方法內(nèi)部注釋: 控制結(jié)構(gòu),代碼做了些什么以及為什么這樣做,處理順序等,特別是復(fù)雜的邏輯處理部分,要盡可能的給出具體的注釋?zhuān)?/li>
  6. 參數(shù): 參數(shù)含義、及其它任何約束或條件條件;
  7. 屬性: 字段描述;
  8. 局部 ( 中間 ) 變量: 無(wú)特別意義的情況下不加注釋?zhuān)?/li>

(三)、注釋格式

遵循工程規(guī)定的同一注釋格式,一般情況下會(huì)以 codetemplates.xml 格式的文件導(dǎo)進(jìn) IDE(Eclipse) 或者用Eclipse默認(rèn)的;

四、代碼格式規(guī)范

遵循工程規(guī)定的同一代碼格式,一般情況下直接使用 IDE(Eclipse) 自帶的默認(rèn)代碼格式對(duì)代碼進(jìn)行格式化;

五、其他規(guī)范

JSP 文件命名

用完整的英文描述說(shuō)明 JSP 所完成的功能,盡可能包括一個(gè)生動(dòng)的動(dòng)詞,第一個(gè)字母小寫(xiě),

如: viewMessage.jsp 、editUser.jsp 等。

六、工程特有命名規(guī)范

(一)、持久層

  1. Hibernate 映射文件及實(shí)體與數(shù)據(jù)庫(kù)表名稱(chēng)完全對(duì)應(yīng);
    如: Advertisement.hbm.xml 、 Advertisement.java

  2. 數(shù)據(jù)訪(fǎng)問(wèn) DAO
    DAO 接口和實(shí)現(xiàn)類(lèi)名稱(chēng)必須完全符合正常接口和實(shí)現(xiàn)類(lèi)的命名規(guī)則,且最后以 ”DAO” 結(jié)尾DAO 內(nèi)的數(shù)據(jù)訪(fǎng)問(wèn)方法必須足夠抽象的描述出對(duì)數(shù)據(jù)庫(kù)的基本 CRUD 操縱;
    如: ICrossAdDAO( 接口 ) 、 CrossAdDAO( 實(shí)現(xiàn)類(lèi) )

  3. 各種操縱數(shù)據(jù)庫(kù)的 HQL 配置文件
    HQL 文件的個(gè)數(shù)原則上與系統(tǒng)的 Services 層的服務(wù)個(gè)數(shù)相等,且以服務(wù)名稱(chēng)命名 HQL 文件;
    如: resource.hbm.xml

(二)、服務(wù)層

1. 服務(wù)接口和實(shí)現(xiàn)

服務(wù)接口和實(shí)現(xiàn)類(lèi)必須完全符合正常接口和實(shí)現(xiàn)類(lèi)的命名規(guī)則;以工程定義的服務(wù)名為主體, 并同一以 ”Serv” 結(jié)尾
如: IResourceServ( 服務(wù)接口 ) 、 ResourceServ( 接口實(shí)現(xiàn)類(lèi) )

2. 服務(wù)接口方法

方法名是一個(gè)動(dòng)詞,采用大小寫(xiě)混合的方式,第一個(gè)單詞的首字母小寫(xiě),其后單詞的首字母大寫(xiě)。
方法名盡可能的描述出該方法的動(dòng)作行為。

  • 返回類(lèi)型為 Boolean 值:用“ is ”或“ has ”來(lái)開(kāi)頭
  • 得到某數(shù)據(jù): get+ 數(shù)據(jù)描述名詞復(fù)數(shù) + 數(shù)據(jù)類(lèi)型;
  • 得到所有數(shù)據(jù): get+All+ 數(shù)據(jù)描述名詞復(fù)數(shù) + 數(shù)據(jù)類(lèi)型;
  • 通過(guò) XXX 得到 / 查詢(xún)某數(shù)據(jù): get/query+ 數(shù)據(jù)描述名詞復(fù)數(shù) + 數(shù)據(jù)類(lèi)型 +By+ 條件;
  • 添加某數(shù)據(jù): save/add+ 數(shù)據(jù)描述名詞 ()
  • 更新某數(shù)據(jù): save/update+ 數(shù)據(jù)描述名詞;
  • 刪除某數(shù)據(jù): delete/remove+ 數(shù)據(jù)描述名詞;

3. 業(yè)務(wù)對(duì)象

業(yè)務(wù)名稱(chēng) +BO

4. 查詢(xún)參數(shù)對(duì)象

凡是繼續(xù) Abst***QuerySpec 的查詢(xún)參數(shù)類(lèi)全部滿(mǎn)足以下規(guī)則:

  • Query+ 所要查詢(xún)的數(shù)據(jù)描述名詞 +Spec
  • 作為參數(shù)傳進(jìn)時(shí),參數(shù)名必須為:所要查詢(xún)的數(shù)據(jù)描述名詞 +Spec

如: QueryProgramSpec

(三)、MVC 層

1、Action 控制層

  • Action 類(lèi)名:功能模塊名稱(chēng) +Action ;
  • Actoin 方法名稱(chēng)盡可能的描述出頁(yè)面遷移的往向

如: LoginAction( 登錄用 action) , toWelcome( 轉(zhuǎn)向歡迎頁(yè)的 action 方法 )

2、資源文件

  • 系統(tǒng)全局資源文件: globalMessages_+ 字符編碼類(lèi)型 +.properties
  • 功能模塊內(nèi)部的資源文件: package.properties

(四)、Spring 配置文件

1. Action 相關(guān)配置文件

  • 文件目錄: WebRoot/WEB-INF/spring/action/功能模塊名稱(chēng) +_ApplicationContext.xml

2. Services 相關(guān)配置文件

  • 文件目錄: WebRoot/WEB-INF/spring/services/Services_ApplicationContext.xml

3. 全局性配置文件

  • 文件目錄: WebRoot/WEB-INF/spring/工程名+_ApplicationContext.xml

4. JSP 文件

采用完整的英文描述說(shuō)明 JSP 所完成的功能,盡可能包括一個(gè)生動(dòng)的動(dòng)詞,第一個(gè)字母小寫(xiě),
如: viewMessage.jsp 、editUser.jsp 等。

七、應(yīng)用命名總結(jié)

所有文件,變量同一采用英文單詞表示。盡量避免簡(jiǎn)寫(xiě)和縮寫(xiě)。

(一)、 java類(lèi)

java類(lèi)根據(jù)java規(guī)范采用駝峰標(biāo)示,java類(lèi)首字母大寫(xiě),類(lèi)名中的各個(gè)單詞首字母都大寫(xiě)。

Java類(lèi)代表現(xiàn)實(shí)世界的一個(gè)事物,類(lèi)名詞最好是一個(gè)名詞。最好采用現(xiàn)實(shí)的名稱(chēng)。如員工用Employee,而不是Employ避免歧義。最好不是用縮寫(xiě)empl等。

  • 應(yīng)用軟件中經(jīng)常應(yīng)用分層,每一層的類(lèi)的名稱(chēng)盡量帶上該層后綴。
  • 推薦實(shí)體類(lèi)沒(méi)有后綴名。
  • 數(shù)據(jù)層使用SQLMapper后綴。
  • 數(shù)據(jù)層查詢(xún)參數(shù)為Param
  • 服務(wù)層使用Service
  • Web層使用Packager
  • Web層form表單后綴為Form

比如員工模塊,分別為Employee(實(shí)體),EmployeeSQLMapper(數(shù)據(jù)層),EmployeeService(服務(wù)層),EmployeePackager(web層)

常用英文名稱(chēng)(最好能整理一份常用詞匯詞典)

  • 員工:employee
  • 部分:department

(二)、 字段

根據(jù)java駝峰標(biāo)示命名法,java字段以首字母以小寫(xiě)開(kāi)頭,每個(gè)單詞首字母大寫(xiě)(第一個(gè)單詞除外)。

字段表示現(xiàn)實(shí)中一個(gè)事物的屬性在類(lèi)中的名稱(chēng),最好用名詞。字段名稱(chēng)應(yīng)采用最精確的單詞,盡量采用一個(gè)單詞。沒(méi)有必要把類(lèi)名掛在字段前面,如employee的id字段,直接可以用id,不用使用employeeId,假如出現(xiàn)兩個(gè)字段可能產(chǎn)生歧義,可以增加描述性單詞來(lái)區(qū)分。

字段命名最好能看詞識(shí)意。

(三)、 方法

方法表示一種行為,它代表一種動(dòng)作,最好是一個(gè)動(dòng)詞或者動(dòng)詞詞組或者第一個(gè)單詞為一個(gè)動(dòng)詞。

屬性方法,get/set開(kāi)頭,其后跟字段名稱(chēng),字段名稱(chēng)首字母大寫(xiě)。

數(shù)據(jù)層方法,只能以insert(插進(jìn)),delete(刪除),update(更新),select(查找),count(統(tǒng)計(jì))開(kāi)頭,其他層方法避免以這個(gè)5個(gè)單詞開(kāi)頭,以免造成誤解。

服務(wù)層方法,根據(jù)方法的行為命名,只描述方法的意義,而不采用方法的目的命名。比如系統(tǒng)的添加新用戶(hù),用戶(hù)可以前臺(tái)注冊(cè),也可以治理員后臺(tái)添加,方法會(huì)被重用,所以最好不要用使用register,采用add會(huì)更好寫(xiě)。避免使用與web層相關(guān)的方法。

Web層方法最好是貼近web的語(yǔ)言,如register,login,logout等方法。

(四)、 變量

變量是一方法中重要的元素,一個(gè)貼切的名稱(chēng),能讓這段代碼優(yōu)雅百倍(夸張一下)。變量名首字母小寫(xiě)。

變量屬于名稱(chēng),避免用采用其他詞性。

采用名稱(chēng)要能代表在方法中的意義。假如員工列表:

最好是使用List employees或則employeeList而不是往使用List list或則更糟糕的List l,假如應(yīng)用了List employees和Map employees可以分別使用employeeList和employeeMap。

自定義類(lèi)型的變量可以采用本身的名稱(chēng),把首字母改為小寫(xiě)。

(五)、 Xml文件名

Xml命名采用與類(lèi)名相似的方法,采用首字母大寫(xiě)的駝峰標(biāo)示。

Ibatas映射文件:namespace名稱(chēng)為該模塊實(shí)體類(lèi)的名稱(chēng),首字母大寫(xiě),typealias采用該類(lèi)*** name。resultMap和sql名稱(chēng)采用首字母小寫(xiě)的命名規(guī)則,方法名稱(chēng)與數(shù)據(jù)層方法名稱(chēng)一致。

Form和FormItem文件名才用首字母大寫(xiě)的駝峰標(biāo)示。Form名稱(chēng)也使用首字母大寫(xiě)的格式。Form中的item名稱(chēng)使用與form表單類(lèi)的屬性名稱(chēng)。采用駝峰標(biāo)示(最好不使用_分隔)

Action文件名稱(chēng)使用首字母大寫(xiě),文件package和action name字段采用所有字母小寫(xiě)的格式。

(六)、 URL命名

url路徑名稱(chēng)同一采用小寫(xiě)(所有字母都用小寫(xiě)),用get方法提交的參數(shù)名和url路徑名一樣使用小寫(xiě)。

1. J2EE規(guī)范

(1). J2EE規(guī)范

J2EE(Java 2 Platform,Enterprise Edition)是SUN公司定義的一個(gè)開(kāi)發(fā)分布式企業(yè)級(jí)應(yīng)用的規(guī)范。它提供了一個(gè)多層次的分布式應(yīng)用模型和一系列開(kāi)發(fā)技術(shù)規(guī)范。多層次分布式應(yīng)用模型是指根據(jù)功能把應(yīng)用邏輯分成多個(gè)層次,每個(gè)層次支持相應(yīng)的服務(wù)器和組件,組件在分布式服務(wù)器的組件容器中運(yùn)行(如Servlet組件在Servlet容器上運(yùn)行,EJB組件在EJB容器上運(yùn)行),容器間通過(guò)相關(guān)的協(xié)議進(jìn)行通訊,實(shí)現(xiàn)組件間的相互調(diào)用。遵從這個(gè)規(guī)范的開(kāi)發(fā)者將得到行業(yè)的廣泛支持,使企業(yè)級(jí)應(yīng)用的開(kāi)發(fā)變得簡(jiǎn)單、快速。

(2). J2EE組件層次

J2EE組件和層次如圖1-1所示。

圖1-1 J2EE組件層次(略)

①. J2EE規(guī)范定義了如下組件

A. 客戶(hù)端組件
B. Web組件
C. EJB組件

②. J2EE規(guī)范定義了以下四個(gè)層次。

A. 客戶(hù)端層(Client Tier)

客戶(hù)端層用來(lái)實(shí)現(xiàn)企業(yè)級(jí)應(yīng)用系統(tǒng)的操縱界面和顯示層。另外,某些客戶(hù)端程序也可實(shí)現(xiàn)業(yè)務(wù)邏輯??煞譃榛赪eb的和非基于Web的客戶(hù)端兩種情況?;赪eb的情況下主要作為企業(yè)Web服務(wù)器的瀏覽器。非基于Web的客戶(hù)層則是獨(dú)立的應(yīng)用程序,可以完成瘦客戶(hù)機(jī)無(wú)法完成的任務(wù)。

B. Web層

為企業(yè)提供Web服務(wù)。包括企業(yè)信息發(fā)布等。Web層由Web組件組成。J2EE Web組件包括JSP頁(yè)面和Servlets。Web層也可以包括一些JavaBeans。Web層主要用來(lái)處理客戶(hù)請(qǐng)求,調(diào)用相應(yīng)的邏輯塊,并把結(jié)果以動(dòng)態(tài)網(wǎng)頁(yè)的形式返回到客戶(hù)端。

C. 業(yè)務(wù)層(Business Tier)

業(yè)務(wù)層也叫EJB層或應(yīng)用層,它由EJB服務(wù)器和EJB組件組成。一般情況下很多開(kāi)發(fā)商把Web服務(wù)器和EJB服務(wù)器產(chǎn)品結(jié)合在一起發(fā)布,稱(chēng)為應(yīng)用服務(wù)器。EJB層用來(lái)實(shí)現(xiàn)企業(yè)級(jí)信息系統(tǒng)的業(yè)務(wù)邏輯。這是企業(yè)級(jí)應(yīng)用的核心,由運(yùn)行在業(yè)務(wù)層中的EJB來(lái)處理。一個(gè)Bean從客戶(hù)端接收數(shù)據(jù)、處理,然后把數(shù)據(jù)送到企業(yè)信息系統(tǒng)層存儲(chǔ)起來(lái)。同樣,一個(gè)Bean也可以從企業(yè)信息系統(tǒng)取出數(shù)據(jù),發(fā)送到客戶(hù)端程序。業(yè)務(wù)層中的EJB要運(yùn)行在容器中,容器解決了底層的題目,如事務(wù)處理、生命周期、狀態(tài)治理、多線(xiàn)程安全治理、資源池等。

D. 企業(yè)信息系統(tǒng)層(Enterprise Information System tier)

處理企業(yè)系統(tǒng)軟件,包括企業(yè)基礎(chǔ)系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)及其他遺留的系統(tǒng)。J2EE將來(lái)的版本支持連接架構(gòu)(Connector Architecture)。它是連接J2EE平臺(tái)和企業(yè)信息系統(tǒng)層的標(biāo)準(zhǔn)API。
業(yè)務(wù)層和Web層共同組成了三層J2EE應(yīng)用的中間層,其他兩層是客戶(hù)端層和存儲(chǔ)層或企業(yè)信息系統(tǒng)層。

E. J2EE的分布應(yīng)用技術(shù)

為實(shí)現(xiàn)企業(yè)級(jí)分布式應(yīng)用,J2EE定義了豐富的技術(shù)標(biāo)準(zhǔn),符合這些標(biāo)準(zhǔn)的開(kāi)發(fā)工具和API為開(kāi)發(fā)企業(yè)級(jí)應(yīng)用提供支持。這些技術(shù)涵蓋數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)、分布式通訊、安全等。為分布式應(yīng)用提供支持的多方面。

a. 組件技術(shù)

J2EE的核心思想是基于組件/容器的應(yīng)用。每個(gè)組件提供了方法、屬性、事件的接口。組件可以由多種語(yǔ)言開(kāi)發(fā)。組件是可以重用的、共享的、分布的。

b. Servlets和JSP

Servlets用來(lái)天生動(dòng)態(tài)頁(yè)面或接收用戶(hù)請(qǐng)求產(chǎn)生相應(yīng)操縱(調(diào)用EJB)。JSP基于文本。通過(guò)容器產(chǎn)生相應(yīng)的Servlets,使內(nèi)容和顯示分開(kāi)。J2EE中提供了Servlet API,用于創(chuàng)建Servlets。

c. EJB技術(shù)

EJB規(guī)范提供了一種開(kāi)發(fā)和部署服務(wù)器端組件的方法。每個(gè)EJB是按功能邏輯劃分的,開(kāi)發(fā)時(shí)不必關(guān)注系統(tǒng)底層細(xì)節(jié)題目,只關(guān)注具體的事務(wù)分析。EJB開(kāi)發(fā)完畢后,按規(guī)范部署在EJB容器,完成相應(yīng)的事務(wù)功能。EJB支持分布式計(jì)算。真正體現(xiàn)了企業(yè)級(jí)的應(yīng)用。

d. 數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)

無(wú)論是傳統(tǒng)的企業(yè)信息系統(tǒng)還是將來(lái)的企業(yè)信息系統(tǒng),數(shù)據(jù)庫(kù)都占有重要的地位。開(kāi)發(fā)分布式系統(tǒng)要求數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)具有良好的靈活性和擴(kuò)展性。JDBC(JavaDatabase Connectivity)是一個(gè)獨(dú)立于特定的數(shù)據(jù)庫(kù)治理系統(tǒng)的開(kāi)發(fā)接口。它提供一個(gè)通用的訪(fǎng)問(wèn)SQL數(shù)據(jù)庫(kù)和存儲(chǔ)結(jié)構(gòu)的機(jī)制,支持基本SQL功能的一個(gè)通用底層的應(yīng)用程序編程接口。它在不同的數(shù)據(jù)庫(kù)界面上提供了一個(gè)同一的用戶(hù)界面。提供了多種多樣的數(shù)據(jù)庫(kù)連接方式。J2EE中提供了JDBC API使多種數(shù)據(jù)庫(kù)操縱簡(jiǎn)單、可行。

e. 分布式通訊技術(shù)

分布式通訊技術(shù)是分布式企業(yè)系統(tǒng)的核心技術(shù)。J2EE框架為Web應(yīng)用和EJB應(yīng)用提供多種通訊模式。

為了使運(yùn)行于某一機(jī)器上的對(duì)象調(diào)用另一臺(tái)機(jī)器的對(duì)象,J2EE實(shí)現(xiàn)了如下通訊方式

  • Java RMI(Remote Method Invoke):遠(yuǎn)程方法調(diào)用。Java RMI實(shí)現(xiàn)Java對(duì)象間的遠(yuǎn)程通訊。服務(wù)器用注冊(cè)器把一個(gè)名字和遠(yuǎn)程對(duì)象綁在一起,客戶(hù)機(jī)通過(guò)名字從服務(wù)器注冊(cè)器上查找遠(yuǎn)程對(duì)象,找到后下載遠(yuǎn)程對(duì)象的本地代理,調(diào)用遠(yuǎn)程對(duì)象的方法。
  • Java IDL(Java Inte***ce Defilation Language):接口定義語(yǔ)言??梢詫?shí)現(xiàn)Java對(duì)象的符合CORBA規(guī)范的遠(yuǎn)程對(duì)象通訊。
  • JNDI(Java Naming and Directory Inte***ce):Java命名和目錄接口。JNDI為分布式系統(tǒng)訪(fǎng)問(wèn)遠(yuǎn)程對(duì)象提供了一個(gè)標(biāo)準(zhǔn)的命名接口。EJB主接口對(duì)象、數(shù)據(jù)源、消息服務(wù)器等都可以用JDNI樹(shù)的形式注冊(cè)到名稱(chēng)服務(wù)器中,調(diào)用它們的對(duì)象通過(guò)符合JDNI的程序接口在JNDI名稱(chēng)服務(wù)器中查找指定名稱(chēng)的遠(yuǎn)程對(duì)象。
  • JMS(Java Message Service):Java消息服務(wù)。為開(kāi)發(fā)消息中間件應(yīng)用程序定義了一套規(guī)范。Java客戶(hù)端和Java中間層訪(fǎng)問(wèn)消息系統(tǒng)只要實(shí)現(xiàn)JMS定義的簡(jiǎn)單的接口,就可以實(shí)現(xiàn)復(fù)雜的應(yīng)用,而不必往關(guān)注低級(jí)的技術(shù)細(xì)節(jié)。

八、JAVA編程規(guī)范

(一)應(yīng)用范圍

本規(guī)范應(yīng)用于采用J2EE規(guī)范的項(xiàng)目中,所有項(xiàng)目中的JAVA代碼(含JSP,SERVLET,JAVABEAN,EJB)均應(yīng)遵守這個(gè)規(guī)范。同時(shí),也可作為其它項(xiàng)目的參考。

(二)、設(shè)計(jì)類(lèi)和方法

1. 創(chuàng)建具有很強(qiáng)內(nèi)聚力的類(lèi)

方法的重要性往往比類(lèi)的重要性更輕易理解,方法是指執(zhí)行一個(gè)同一函數(shù)的一段代碼。類(lèi)常被錯(cuò)誤的視為是一個(gè)僅僅用于存放方法的容器。有些開(kāi)發(fā)職員甚至把這種思路作了進(jìn)一步的發(fā)揮,將他們的所有方法放進(jìn)單個(gè)類(lèi)之中。

(1). J2EE是一套全然不同于傳統(tǒng)應(yīng)用開(kāi)發(fā)的技術(shù)架構(gòu),包含很多組件,主要可簡(jiǎn)化且規(guī)范應(yīng)用系統(tǒng)的開(kāi)發(fā)與部署,進(jìn)而進(jìn)步可移植性、安全與再用價(jià)值。

(2). J2EE 的四層模型

①.運(yùn)行在客戶(hù)端機(jī)器上的客戶(hù)層組件

②.運(yùn)行在J2EE服務(wù)器上的Web層組件

③.運(yùn)行在J2EE服務(wù)器上的業(yè)務(wù)邏輯層組件

④.運(yùn)行在EIS服務(wù)器上的企業(yè)信息系統(tǒng)(Enterprise information system)層軟件

九、J2EE應(yīng)用程序組件

J2EE應(yīng)用程序是由組件構(gòu)成的.J2EE組件是具有獨(dú)立功能的軟件單元,它們通過(guò)相關(guān)的類(lèi)和文件組裝成J2EE應(yīng)用程序,并與其他組件交互

J2EE說(shuō)明書(shū)中定義了以下的J2EE組件:

  • 應(yīng)用客戶(hù)端程序和applets是客戶(hù)層組件.
  • Java Servlet和JavaServer Pages(JSP)是web層組件.
  • Enterprise JavaBeans(EJB)是業(yè)務(wù)層組件.

1. 客戶(hù)層組件

J2EE應(yīng)用程序可以是基于web方式的,也可以是基于傳統(tǒng)方式的.

2. web 層組件

J2EE web層組件可以是JSP 頁(yè)面或Servlets.按照J(rèn)2EE規(guī)范,靜態(tài)的HTML頁(yè)面和Applets不算是web層組件。正如下圖所示的客戶(hù)層那樣,web層可能包含某些 JavaBean 對(duì)象來(lái)處理用戶(hù)輸進(jìn),并把輸進(jìn)發(fā)送給運(yùn)行在業(yè)務(wù)層上的enterprise bean 來(lái)進(jìn)行處理。

3. 業(yè)務(wù)層組件

業(yè)務(wù)層代碼的邏輯用來(lái)滿(mǎn)足銀行,零售,金融等特殊商務(wù)領(lǐng)域的需要,由運(yùn)行在業(yè)務(wù)層上的enterprise bean 進(jìn)行處理.下圖表明了一個(gè)enterprise bean 是如何從客戶(hù)端程序接收數(shù)據(jù),進(jìn)行處理(假如必要的話(huà)), 并發(fā)送到EIS 層儲(chǔ)存的,這個(gè)過(guò)程也可以逆向進(jìn)行。有三種企業(yè)級(jí)的bean: 會(huì)話(huà)(session) beans, 實(shí)體(entity) beans, 和消息驅(qū)動(dòng)(message-driven) beans. 會(huì)話(huà)bean 表示與客戶(hù)端程序的臨時(shí)交互.當(dāng)客戶(hù)端程序執(zhí)行完后, 會(huì)話(huà)bean 和相關(guān)數(shù)據(jù)就會(huì)消失. 相反, 實(shí)體bean 表示數(shù)據(jù)庫(kù)的表中一行永久的記錄. 當(dāng)客戶(hù)端程序中止或服務(wù)器封閉時(shí), 就會(huì)有潛伏的服務(wù)保證實(shí)體bean 的數(shù)據(jù)得以保存.消息驅(qū)動(dòng) bean 結(jié)合了會(huì)話(huà)bean 和 JMS的消息監(jiān)聽(tīng)器的特性, 答應(yīng)一個(gè)業(yè)務(wù)層組件異步接收J(rèn)MS 消息.

4. 企業(yè)信息系統(tǒng)層

企業(yè)信息系統(tǒng)層處理企業(yè)信息系統(tǒng)軟件包括企業(yè)基礎(chǔ)建設(shè)系統(tǒng)例如企業(yè)資源計(jì)劃(ERP), 大型機(jī)事務(wù)處理, 數(shù)據(jù)庫(kù)系統(tǒng),和其它的遺留信息系統(tǒng). 例如,J2EE 應(yīng)用組件可能為了數(shù)據(jù)庫(kù)連接需要訪(fǎng)問(wèn)企業(yè)信息系統(tǒng)3, J2EE平臺(tái)由一整套服務(wù)(Services)、應(yīng)用程序接口(APIs)和協(xié)議構(gòu)成,它對(duì)開(kāi)發(fā)基于Web的多層應(yīng)用提供了功能支持,下面對(duì)J2EE中的 13種技術(shù)規(guī)范進(jìn)行簡(jiǎn)單的描述

5. JDBC(Java Database Connectivity)

JDBC API為訪(fǎng)問(wèn)不同的數(shù)據(jù)庫(kù)提供了一種同一的途徑,象ODBC一樣,JDBC對(duì)開(kāi)發(fā)者屏蔽了一些細(xì)節(jié)題目,另外,JDCB對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)也具有平臺(tái)無(wú)關(guān)性。 JNDI(Java Name and Directory Inte***ce)

JNDI API被用于執(zhí)行名字和目錄服務(wù)。它提供了一致的模型來(lái)存取和操縱企業(yè)級(jí)的資源如DNS和LDAP,本地文件系統(tǒng),或應(yīng)用服務(wù)器中的對(duì)象。

6. EJB(Enterprise JavaBean)

J2EE技術(shù)之所以贏(yíng)得媒體廣泛重視的原因之一就是 EJB。它們提供了一個(gè)框架來(lái)開(kāi)發(fā)和實(shí)施分布式商務(wù)邏輯,由此很明顯地簡(jiǎn)化了具有可伸縮性和高度復(fù)雜的企業(yè)級(jí)應(yīng)用的開(kāi)發(fā)。EJB規(guī)范定義了EJB組件在何 時(shí)如何與它們的容器進(jìn)行交互作用。容器負(fù)責(zé)提供公用的服務(wù),例如目錄服務(wù)、事務(wù)治理、安全性、資源緩沖池以及容錯(cuò)性。但這里值得留意的是,EJB并不是實(shí) 現(xiàn)J2EE的唯一途徑。正是由于J2EE的開(kāi)放性,使得有的廠(chǎng)商能夠以一種和EJB平行的方式來(lái)達(dá)到同樣的目的。 RMI(Remote Method Invoke)

正如其名字所表示的那樣,RMI協(xié)議調(diào)用遠(yuǎn)程對(duì)象上方法。它使用了序列化方式在客戶(hù)端和服務(wù)器端傳遞數(shù)據(jù)。 RMI是一種被EJB使用的更底層的協(xié)議。

7. Java IDL/CORBA

在Java IDL的支持下,開(kāi)發(fā)職員可以將Java和CORBA集成在一起。他們可以創(chuàng)建Java對(duì)象并使之可在CORBA ORB中展開(kāi), 或者他們還可以創(chuàng)建Java類(lèi)并作為和其它ORB一起展開(kāi)的CORBA對(duì)象的客戶(hù)。后一種方法提供了另外一種途徑,通過(guò)它Java可以被用于將你的新的應(yīng) 用和舊的系統(tǒng)相集成。 JSP(Java Server Pages)

JSP頁(yè)面由HTML代碼和嵌進(jìn)其中的Java代碼所組成。服務(wù)器在頁(yè)面被客戶(hù)端所請(qǐng)求以后對(duì)這些Java代碼進(jìn)行處理,然后將天生的HTML頁(yè)面返回給客戶(hù)真?zhèn)€瀏覽器。

8. Java Servlet

Servlet是一種小型的Java程序,它擴(kuò)展了Web服務(wù)器的功能。作為一種服務(wù)器真?zhèn)€應(yīng)用,當(dāng)被請(qǐng)求時(shí)開(kāi)始執(zhí)行,這和CGI Perl腳本很相似。Servlet提供的功能大多與JSP類(lèi)似,不過(guò)實(shí)現(xiàn)的方式不同。JSP通常是大多數(shù)HTML代碼中嵌進(jìn)少量的Java代碼,而 servlets全部由Java寫(xiě)成并且天生HTML。

9. XML(Extensible Markup Language)

XML是一種可以用來(lái)定義其它標(biāo)記語(yǔ)言的語(yǔ)言。它被用來(lái)在不同的商務(wù)過(guò)程中共享數(shù)據(jù)。

XML的發(fā)展和Java是相互獨(dú)立的,但是,它和Java具有的相同目標(biāo)正是平立性。通過(guò)將Java和XML的組合,您可以得到一個(gè)完美的具有平立性的解決方案。

10. JMS(Java Message Service)

MS是用于和面向消息的中間件相互通訊的應(yīng)用程序接口(API)。它既支持點(diǎn)對(duì)點(diǎn)的域,有支持發(fā)布/訂閱 (publish/subscribe)類(lèi)型的域,并且提供對(duì)下列類(lèi)型的支持:經(jīng)認(rèn)可的消息傳遞,事務(wù)型消息的傳遞,一致性消息和具有持久性的訂閱者支 持。JMS還提供了另一種方式來(lái)對(duì)您的應(yīng)用與舊的后臺(tái)系統(tǒng)相集成。

11. JTA(Java Transaction Architecture)

JTA定義了一種標(biāo)準(zhǔn)的API,應(yīng)用系統(tǒng)由此可以訪(fǎng)問(wèn)各種事務(wù)監(jiān)控。

12. JTS(Java Transaction Service):

JTS是CORBA OTS事務(wù)監(jiān)控的基本的實(shí)現(xiàn)。JTS規(guī)定了事務(wù)治理器的實(shí)現(xiàn)方式。該事務(wù)治理器是在高層支持Java Transaction API (JTA)規(guī)范,并且在較底層實(shí)現(xiàn)OMG OTS specification的Java映像。JTS事務(wù)治理器為應(yīng)用服務(wù)器、資源治理器、獨(dú)立的應(yīng)用以及通訊資源治理器提供了事務(wù)服務(wù)。

13. JavaMail

JavaMail是用于存取郵件服務(wù)器的API,它提供了一套郵件服務(wù)器的抽象類(lèi)。不僅支持SMTP服務(wù)器,也支持IMAP服務(wù)器。

14. JAF(JavaBeans Activation Framework)

JavaMail利用JAF來(lái)處理MIME編碼的郵件附件。MIME的字節(jié)流可以被轉(zhuǎn)換成Java對(duì)象,或者轉(zhuǎn)換自 Java對(duì)象。大多數(shù)應(yīng)用都可以不需要直接使用JAF。

Java_蘇先生:專(zhuān)注于Java開(kāi)發(fā)技術(shù)的研究與知識(shí)分享!

————END————

  • 點(diǎn)贊(感謝)
  • ...
  • 轉(zhuǎn)發(fā)(感謝)
  • ...
  • 關(guān)注(感謝)
  • ...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容