




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、版本信息*A代表新增,M代表修改,D代表刪除;版本號發(fā)布日期提交人審閱人A.M.D更新位置更新摘要V1.02014-07-26李健進(jìn)A擬初稿V1.12014-08-22李健進(jìn)A2.8增加系統(tǒng)安全性內(nèi)容V1.22014-08-28李健進(jìn)M精簡部分重復(fù)無意義描述V1.32014-09-03李健進(jìn)A2.6增加異常捕捉內(nèi)容V1.42014-09-15李健進(jìn)A3增加數(shù)據(jù)庫規(guī)范中部分內(nèi)容V1.52014-10-27李健進(jìn)A.2增加對MVC各層作用的描述與主鍵生成策略約束修官站計2看丈把“、目錄1. 前言5.1.1. 目的范圍. 目的作用. 應(yīng)用范圍5.1.2.
2、閱讀說明5.2. Java編碼原則6.2.1. 類、接口. 設(shè)計原則. 設(shè)計約束6.2.2. 方法. 設(shè)計原則7.2.3. 變量. 設(shè)計約束7.2.4. 表達(dá)式與語句. 設(shè)計約束7.2.5. 序列化. 設(shè)計約束8.2.6. 異常捕捉. 設(shè)計原則. 設(shè)計約束8.2.7. 日志. 設(shè)計原則9.2.8. 線程安全性. 設(shè)計約束9.2.9. 系統(tǒng)與資源安全性102.9.1. 設(shè)計原則1.02.9.2. 設(shè)計約束1.02.10. 性能1.02.10.1. 設(shè)計原則1
3、02.10.2. 設(shè)計約束1.12.11. 單元測試. 設(shè)計原則. 設(shè)計約束1.13. 數(shù)據(jù)庫設(shè)計原則1.23.1. 數(shù)據(jù)庫設(shè)計規(guī)范123.1.1. 設(shè)計原則. 設(shè)計約束133.2. 數(shù)據(jù)庫開發(fā)規(guī)范133.2.1. 設(shè)計原則. 設(shè)計約束1.44. EXOA二次開發(fā)原則1.54.1. 二次開發(fā)方法154.1.1. 二次開發(fā)規(guī)模評估. 修改原有模塊154.1.3. 新增模塊154.1.4. 新增應(yīng)用系統(tǒng)164.2. 二次開發(fā)規(guī)約細(xì)則165. 代碼管理原則1.75.1. 代碼管理. 設(shè)計約束1.75.
4、2. 版本控制管理. 設(shè)計約束1.8修第3班量碘小”!公',開發(fā)原則與約束1 .刖百1.1. 目的范圍1.1.1. 目的作用本規(guī)范的主要目的為指導(dǎo)、規(guī)范軟件編程人員進(jìn)行軟件代碼編寫工作,提高軟件開發(fā)工程師的軟件編寫能力。代碼規(guī)范相當(dāng)重要,代碼規(guī)范提高軟件代碼的可讀性,使得開發(fā)人員快速和徹底的理解新代碼。好的代碼風(fēng)格不僅會提高可讀性,而且會使代碼更健壯,更為重要的是在修改時不容易出錯。1.1.2. 應(yīng)用范圍公司所有涉及程序編寫的人員和部門。本約定適用于可執(zhí)行系統(tǒng)的源代碼文件。為了執(zhí)行規(guī)范,每個軟件開發(fā)人員必須一致遵守編程規(guī)范。1.2. 閱讀說明本規(guī)范主要分為設(shè)計原則與設(shè)計
5、約束兩大類。設(shè)計原則。主要為設(shè)計建議,根據(jù)建議可以寫出更優(yōu)質(zhì)的代碼。本文中為【非加粗字體】;設(shè)計約束。指的是所有所發(fā)人員必須要嚴(yán)格遵守的規(guī)約、不允許有違規(guī)行為。本文中規(guī)約以【加粗加體】標(biāo)識。其中【灰色的加粗加】表示產(chǎn)品組內(nèi)部強(qiáng)制執(zhí)行,各項目建議執(zhí)行。鑫京華信總13I3RU*EW*<n2 .Java編碼原則2.1. 類、接口2.1.1. 設(shè)計原則類的劃分粒度要適當(dāng),不宜繼承太深;建議一個類只做一件事,根據(jù)每個類的職責(zé)進(jìn)行劃分;多使用設(shè)計模式,盡量提高代碼重用度;若多個類中使用相同方法時,請將其方法提到一個接口中或使用抽象類;在抽象類和接口都可實現(xiàn)的情況下建議選擇使用接口,以更易于擴(kuò)展及實現(xiàn)
6、多重繼承。2.1.2. 設(shè)計約束程序結(jié)構(gòu)遵守MVC®則:JSPACTIONSERVICEDAODB即:DAO放置不包含業(yè)務(wù)邏輯的純粹數(shù)據(jù)庫操作,為Service提供服務(wù);Service:放置主要的業(yè)務(wù)邏輯代碼,此類型代碼一般為調(diào)用DAOS供的方法進(jìn)行組合與包裝。為Action層提供服務(wù)。若業(yè)務(wù)邏輯非常簡單的情況下,Service層可以省略不寫,同時業(yè)務(wù)邏輯代碼寫在Action層;Action:主要放置數(shù)據(jù)轉(zhuǎn)換、校驗、轉(zhuǎn)發(fā)與業(yè)務(wù)邏輯調(diào)用的代碼,若對應(yīng)存在Service層,則Action層不應(yīng)包含具體的業(yè)務(wù)邏輯代碼;Jsp:分為前端代碼與Java代碼。其中Java代碼應(yīng)僅負(fù)責(zé)數(shù)據(jù)的獲取與
7、解析,不應(yīng)包含具體的業(yè)務(wù)處理邏輯代碼,更不應(yīng)該存在Jsp直接寫SQL語句進(jìn)行操作的行為。2.2. 方法2.2.1. 設(shè)計原則一個方法只完成一項職責(zé),在定義系統(tǒng)的公共接口方法外的方法應(yīng)盡可能的縮小其可見性;避免在一個較長的方法里提供多個出口;當(dāng)多個方法中同時使用一套邏輯相近的代碼時,請將此類型的邏輯代碼抽象成一個獨立的方法;一個方法代碼行數(shù)建議不超過200行。若超過,請將方法進(jìn)行拆分。2.3. 變量2.3.1. 設(shè)計約束禁止在代碼中出現(xiàn)無意義的數(shù)字(MagicNumber),應(yīng)該為此類型的數(shù)字定義一個變量名,提高代碼可讀性;禁止將一個非final實例變量聲明為public,實例變量的傳遞與修改應(yīng)
8、在方法中實現(xiàn)(構(gòu)造函數(shù)、getter、setter)。2.4. 表達(dá)式與語句2.4.1. 設(shè)計約束所有if、for、where等語句的執(zhí)行代碼段必須使用包括起來,即便是只有一個語句;禁止在一行代碼中進(jìn)行多個變量的賦值,如a=(b=c+1);修統(tǒng)朝舸碘些公',開發(fā)原則與約束超過3個else分句請轉(zhuǎn)成switch語句或創(chuàng)建子函數(shù);switch語句的每個case中必須帶有break;循環(huán)語句中必須有終止循環(huán)的條件或語句,否則容易導(dǎo)致死循環(huán)的情況。2.5. 序列化2.5.1. 設(shè)計約束創(chuàng)建序列化類時,serialVersionUID必須設(shè)置一個隨機(jī)的哈希字段,不應(yīng)籠統(tǒng)設(shè)置為-1L;若復(fù)制一個S
9、erializable的類進(jìn)行修改時,必須重新設(shè)置新類的serialVersionUID;針對瞬態(tài)的對象(如IO流對象、Thread對象等)與不希望被序列化的對象,必須在對象聲明前加上transient關(guān)鍵字。2.6. 異常捕捉2.6.1. 設(shè)計原則必須盡可能的精確捕捉異常,而不能籠統(tǒng)使用Exception。2.6.2. 設(shè)計約束當(dāng)捕捉到異常時,必須在catch代碼區(qū)進(jìn)行處理,并且在日志中記錄錯誤信息(System.out、10g4j、oa日志等);異常日志不應(yīng)籠統(tǒng)提及拋出這個異常的方法的名字,應(yīng)有使用說明性的文字描述與完整的異常棧輸出(printStackTrace);禁止捕捉異常后不進(jìn)行任
10、何處理的寫法。2.7. 日志2.7.1. 設(shè)計原則Debug日志記錄盡量通用而全面,且與oa的Debug開關(guān)配合使用,例子如下:booleanisDebug="true".equals(System.getProperty(OAConstant.DEBUG)true:false;if(debug)System.out.println("Debug日志:");2.8. 線程安全性2.8.1. 設(shè)計約束在JSP、Servlet及Struts的Action編程中,非final變量應(yīng)盡量采用局部變量,減少使用實例變量。由于這些情況都是多線程情況,容易產(chǎn)生線性不安
11、全問題;使用synchronized關(guān)鍵字的代碼段或函數(shù)之間禁止相互引用,以免引起死鎖;應(yīng)限制自定義線程個數(shù)上限,不設(shè)線程限制且并發(fā)的情況下(如在Action中start一個新線程),可能會由于線程量暴漲,從而導(dǎo)致native內(nèi)存耗盡,服務(wù)器癱瘓崩潰;對于static關(guān)鍵字修飾的變量、synchronized關(guān)鍵字修飾的代碼段或函數(shù),必須考慮這部分代碼能否在集群環(huán)境下正常運行。因為static的變量變化時無法在集群中簡單共享,synchronized的代碼段不能阻塞并發(fā)在集群里其他節(jié)點的代碼。2.9. 系統(tǒng)與資源安全性2.9.1. 設(shè)計原則與上傳文件相關(guān)的功能(如上傳附件等),必須針對后綴名進(jìn)
12、行判斷與過濾:js、jsp、*htm*(如html、shtml、htm等)、css;SQL語句提交時,由客戶端傳遞的變量值必須使用傳參形式傳入,不允許使用字符串拼接方式實現(xiàn),此舉動容易產(chǎn)生SQLffi入,造成安全隱患;針對插入與修改的功能,應(yīng)校驗由客戶端提交的數(shù)據(jù)是否存在敏感的字符用:style、script、!-、%防止產(chǎn)生JS注入。2.9.2. 設(shè)計約束涉及到流(IO流、NIO流等)、連接(Connection連接、HttpClient連接等)的函數(shù),必須要在finally塊中進(jìn)行資源關(guān)閉,防止代碼段異常時該執(zhí)行的釋放的資源代碼沒被執(zhí)行到;禁止獲取流后不在函數(shù)中持有對象的寫法,如:Stre
13、amUtils.getBytes(newFileInputStream(newFile(path),此種寫法無法對流對象進(jìn)行資源關(guān)閉;文件路徑分隔符(windows下的與linux下的/)必須使用File.separator來獲取,否則會產(chǎn)生操作系統(tǒng)平臺更變時的文件讀寫錯誤。2.10. 性能2.10.1. 設(shè)計原則避免在循環(huán)中頻繁構(gòu)建和釋放對象;避免一次客戶端操作中多次操作數(shù)據(jù)庫,大多數(shù)情況應(yīng)盡量使用單次數(shù)據(jù)庫查詢以完成操作;盡可能早釋放資源(IO流、占大內(nèi)存的對象等),不要過分依賴JVM進(jìn)行Gdg作。2.10.2. 設(shè)計約束在不涉及線性不安全問題的情況下請勿使用synchronized關(guān)鍵字
14、與同步類(使用StringBuilder代替StringBuffer、ArrayList代替Vector、HashMap弋替Hashtable等)。使用時應(yīng)盡量控制范圍,最好是塊級控制;不需要重新賦值的變量(含類變量、實例變量、局部變量)聲明成final,可提高程序響應(yīng)效率;在編輯String的情況下(如多個字符串的累加)必須使用StringBuffer類,處理完成后將StringBuffer對象再轉(zhuǎn)換為需要的String對象。2.11. 單元測試2.11.1. 設(shè)計原則單元測試前請盡量使用Findbugs等代碼檢查工具進(jìn)行檢查,可在一定程度降低代碼中的低級錯誤,插件安裝方法請參考Findbu
15、gs插件操作手冊(Eclipse版).docx»。2.11.2. 設(shè)計約束在代碼提交前必須對更改的功能手工進(jìn)行單元測試,提交的代碼不能出現(xiàn)明顯的錯誤(如點擊后直接報500錯等)。若條件允許,建議使用自動化單元測試。3 .數(shù)據(jù)庫設(shè)計原則3.1. 數(shù)據(jù)庫設(shè)計規(guī)范3.1.1. 設(shè)計原則表設(shè)計時請盡量滿足到3NF(即第三范式);第一范式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;第二范式:2NF是對記錄的惟一性約束,要求記錄有惟一標(biāo)識,即實體的惟一性;第三范式:3NF是對字段冗余性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗余。盡量降低表之間的低級冗余,降低操
16、作時產(chǎn)生臟數(shù)據(jù)與不一致性的可能性,但允許出現(xiàn)高級冗余;低級冗余,即重復(fù)性的冗余。如在A表定義的字段在B表重復(fù)出現(xiàn)。主鍵與外鍵字段不屬于低級冗余范疇;高級冗余,即派生性的冗余。一般這種冗余的目的是為了提高處理速度。如“單價、數(shù)量、金額”三個字段,“金額”就是由“單價”乘以“數(shù)量”派生出來的,這種冗余有助提高性能。新建表時,請合理考慮實際運行時可能會出現(xiàn)的情況,根據(jù)可能會頻繁執(zhí)行的SQL®句建立合理的索引。修官站計2看丈把“、3.1.2. 設(shè)計約束禁止在create腳本中設(shè)置默認(rèn)獲取當(dāng)前數(shù)據(jù)庫服務(wù)器中的系統(tǒng)時間。當(dāng)前時間應(yīng)該在程序中獲取,否則容易由于中間件服務(wù)器與數(shù)據(jù)庫服務(wù)器時間不一致導(dǎo)
17、致問題;所有數(shù)據(jù)庫表必須包含主鍵或復(fù)合主鍵;使用復(fù)合主鍵時,字段個數(shù)不能多于3個,否則可能會導(dǎo)致主鍵索引失效;主鍵生成策略只允許使用以KeyGenerator(commo電中)生成的int類型主鍵或GUID主鍵,禁止使用數(shù)據(jù)庫自增的int主鍵;所有建庫腳本必須按模塊分開,且所有的表結(jié)構(gòu)發(fā)生更改時,建庫腳本必須要有alter語句。3.2. 數(shù)據(jù)庫開發(fā)規(guī)范3.2.1. 設(shè)計原則盡量減少使用數(shù)據(jù)庫的特性,如Oracle的深度遞歸、分頁函數(shù)等;若必須要使用這種特性,請獲取exoa-config中的數(shù)據(jù)庫類型,添加針對不同數(shù)據(jù)庫的特化處理代碼。數(shù)據(jù)庫類型的獲取方法如下(默認(rèn)為Oracle):String
18、databaseType=ConfigHelper.fastGetConfig("common","databaseType","oracle").toLowerCase();使用where時必須考慮語句順序,應(yīng)該根據(jù)索引順序、范圍大小來確定條件子句的前后順序,盡可能的讓字段順序與索引順序相一致,范圍從大到?。蝗粜枰褂糜|發(fā)器時,必須要考慮觸發(fā)器的寫法是否會帶來較大的性能損耗;經(jīng)常出現(xiàn)在Where條件中的字段應(yīng)建立索引,如外鍵字段。Having后的條件索引是無效的;查詢時應(yīng)盡量減少多余數(shù)據(jù)的讀取,通過使用where子句來減少返回的記錄
19、數(shù);對索引列的比較,應(yīng)盡量避免使用not或!=,可拆分為幾個條件。因為“not”和“!=”不會使用索引;在where子句中,如果有多個過濾條件,應(yīng)將索引列或過濾記錄數(shù)最多的條件放在前面;盡量使用exists代替selectcount(1)來判斷是否存在記錄,count函數(shù)只有在統(tǒng)計表中所有行數(shù)時使用。3.2.2. 設(shè)計約束禁止在where子句中的“二”左邊進(jìn)行函數(shù)、算術(shù)運算或其他表達(dá)式運算,此舉動會導(dǎo)致系統(tǒng)將可能無法正確使用索引,如price*10=sum;做關(guān)聯(lián)查詢時,若兩個表關(guān)聯(lián)的字段為重復(fù)性極低的字段(如id),則兩個表關(guān)聯(lián)的字段必須加上索引;禁止可以枚舉出來的數(shù)據(jù)的列建立索引。如布爾型
20、只有T和F,由于這種索引的區(qū)分度太低,數(shù)據(jù)庫選擇索引時幾乎不會選用這類型索引執(zhí)行,同時也存在索引維護(hù)成本,因此不宜建此類型的索引;當(dāng)復(fù)合索引為多列時應(yīng)將變化顯著的列放到復(fù)合索引的首位,且復(fù)合索引不宜超過16列;禁止使用【insertintotable_namevalues(?,?,)語法,必須使用【insertintotable_name(col1,col2,)values(?,?,)】,一旦數(shù)據(jù)列發(fā)生順序變動(如人為變動、數(shù)據(jù)庫遷移)時,此語句無法使用;如無必要情況,禁止使用數(shù)據(jù)庫特性化語句(如Oracle的深度遞歸等),可降低數(shù)據(jù)庫遷移時的成本。4 .EXOA二次開發(fā)原則4.1. 二次開發(fā)
21、方法4.1.1. 二次開發(fā)規(guī)模評估修改原有模塊:原有模塊功能不滿足需求的情況。新增模塊:需求與系統(tǒng)現(xiàn)有模塊差異較大,且新增功能要依賴0心境運行的情況。新增應(yīng)用系統(tǒng):需求規(guī)模較大,與OAS統(tǒng)現(xiàn)有功能基本無交集,且新增功能可不依賴0心境運行的情況。4.1.2. 修改原有模塊評估原模塊功能與需求的差異,差異過大要比較擴(kuò)展與做新模塊之間的長理解原模塊的工作機(jī)制和設(shè)計原意,檢查原模塊是否已提供配置手段實現(xiàn)需求,是否提供了擴(kuò)展方法,若以上皆無,或仍不滿足需求,才對原模塊代碼進(jìn)行修改。分析修改內(nèi)容是否通用,是否會引入新的依賴,是否對數(shù)據(jù)庫結(jié)構(gòu)作變更,后續(xù)能否進(jìn)行產(chǎn)品升級。分析修改對實施的影響。4.1.3.
22、新增模塊反復(fù)確認(rèn)系統(tǒng)中無相近功能的模塊。分析新模塊與系統(tǒng)其它模塊的關(guān)系,明確交互的場景和接口,注意模塊問的依賴不要出現(xiàn)循環(huán)。新模塊采用的技術(shù)方案不能與OA發(fā)生沖突。原則上不允許引入新的第三方軟件依賴。通過對業(yè)務(wù)的分析,預(yù)先考慮擴(kuò)展方案。明確模塊的實施方法,盡量做到配置可自維護(hù),簡化實施過程。4.1.4. 新增應(yīng)用系統(tǒng)反復(fù)確認(rèn)系統(tǒng)中無相近功能的模塊。分析新系統(tǒng)與其它系統(tǒng)(包括OA間的關(guān)系,與其它系統(tǒng)的交互盡量采用代理模式進(jìn)行隔離,代理通過調(diào)用其它系統(tǒng)的分布式接口完成交互。新系統(tǒng)盡量采用與O琳目同的技術(shù)方案,以方便功能遷移。通過對業(yè)務(wù)的分析,預(yù)先考慮擴(kuò)展方案。明確系統(tǒng)的實施方法,盡量做到配置可自維
23、護(hù),簡化實施過程。4.2. 二次開發(fā)規(guī)約細(xì)則數(shù)據(jù)庫編碼、頁面編碼統(tǒng)一使用GBK禁止使用GB2312由于GB2312字符集不全,會導(dǎo)致部分生僻字變成問號;原則上不允許引入第三方包。若必須要引入,在不造成與現(xiàn)有第三方包版本沖突的情況下,通過項目組討論通過后方可引入;相同工作區(qū)下,各個核心包的版本號必須一致;禁止直接使用JDBCW問數(shù)據(jù)庫。在不使用第三方ORM1架的情況下,必須使用SQLUtil進(jìn)行數(shù)據(jù)庫交互;除使用事務(wù),其余的所有SQL操作禁止獲取SQLUtil的connection方法進(jìn)行操作;項目若需要有使用SaaS模式,整個工作區(qū)代碼必須遵守SaaS規(guī)范,具體規(guī)范詳見于4.SAAS模式編碼規(guī)范與約束.docx;禁止直接對核心表(mv才頭、um_F頭的表)進(jìn)行增刪改操作,這種操作必須要調(diào)用核心包的對外公布接口,否則會導(dǎo)致核心公文緩存(如公文表單模板緩存等)中產(chǎn)生臟數(shù)據(jù)。5 .代碼管理原則5.1. 代碼管理5.1.1. 設(shè)計約束所有的代碼提交必須寫readme,且提交時寫上commit的注釋(comments;readme文件需放置在ear工程的根目錄下,一個的產(chǎn)品只允許有一個read
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化活動促進(jìn)未成年人參與計劃
- 鐵路建設(shè)項目現(xiàn)場治安管理計劃
- 創(chuàng)新思維在九年級語文教學(xué)計劃中的應(yīng)用
- 老年護(hù)理中心服務(wù)提升計劃
- 2025小班科技應(yīng)用教學(xué)計劃
- 小學(xué)語文教師與家長溝通計劃
- 軟件質(zhì)量保障與測試計劃
- 路燈設(shè)施維保合同
- 七年級美術(shù)教學(xué)計劃與家長溝通
- 制造業(yè)財務(wù)部門2025年上半年績效評估與計劃
- 頂管工程頂進(jìn)記錄表
- 安全生產(chǎn)、環(huán)境保護(hù)監(jiān)督管理制度(最終版)
- 呼吸道病原體抗體檢測及臨床應(yīng)用課件
- 小學(xué)數(shù)學(xué)命題思考
- 戰(zhàn)略管理教學(xué)ppt課件(完整版)
- 太平歌詞唱詞
- 長篇情感電臺讀文(10篇)精選
- 辦公樓裝飾拆除工程施工方案
- DB35_T 169-2022 森林立地分類與立地質(zhì)量等級
- 動火作業(yè)危害識別及控制措施清單
- 醫(yī)院寧群腦高灌注綜合癥監(jiān)測和防治
評論
0/150
提交評論