開發規範__筆記

開發規範:html

1.開發必須會使用樂觀鎖。樂觀鎖不要採用有意義的字段,考慮用version字段前端

2.設計表結構慎用大字段。注意控制輸入不要超過字段長度,或者截斷。java

3.Mysql儘可能少用join查詢;分庫的不要用,其餘狀況酌情處理。mysql

4.分頁頁面展現不超過10. 提供接口查詢量大,必須分頁。spring

5.緩存。全部的讀操做,必須考慮緩存。緩存key必須是惟一的,緩存時間根據實際狀況設置,key值要sql

有業務意義,作設計的時候,告知需求方,咱們使用緩存的影響。緩存配置要考慮默認值,如取不到數據,chrome

使用默認值。且不能影響正常業務;考慮後臺能隨時清理緩存。Redis manage數據庫

6.全部定時任務考慮是否支持多線程的,是否有補跑機制。考慮使用多頻率調用的方法處理數據。避免集編程

中式爆發;單臺機器多線程+原子控制,集羣指定服務器ip跑定時任務。瀏覽器

7.批量操做,必定要使用分批處理。批處理必定要考慮間隔和上限,1000條作一次。

8.設計表時要加上如下字段:create_time,create_id,cretor,last_modified,modified_by,is_deleted。如是日誌表,

考慮client_ip,server_ip。

9.是否全部頁面上的功能都考慮了多瀏覽器環境支持(必須支持火狐,chrome)

10.對數據惟一性要求很高的話,考慮惟一索引。

11.接口返回儘可能要保證

12.頁面提交按鈕必須防呆。(如考慮遮罩)

13.源文件編碼格式爲utf-8.

14.Long與Integer大小比較,用equals方法,或者先使用longValue()或者intValue()方法來獲得

他們的基本類型的值而後使用==比較也能夠。

命名規範:

1.使用駝峯命名法,方法名以動詞開頭;類命名如:HelloWorld。變量命名如:headCount。

常量命名使用CONSTANT_CASE

2.controller層以**Controller結尾,Service層以**Service結尾,實現類以**ServiceImpl結尾,

Dao層以**Dao結尾,實現類以**DaoImpl結尾。

3.工具類以Utils結尾,並放到單獨的包如:common.utils

4.方法命名;dao層若是是單條查詢請用get開頭,如getOperatorById,查詢集合經過find*list

開頭,findMerchantListByOperatorId;get單表單條數據;find..list單表list;query多表對象;

query..List多表list;新增用insert開頭,更新用update開頭,刪除用delete開頭,Service層

方法命名根據具體業務來,見名知意,如取消訂單,cancelOrder。

5.參數的命名:參數的名字必須和變量的命名規範一致。使用有意義的參數命名,若是可能的

話,使用和要賦值的字段同樣的名字;

6.sql文件以*_mapper.xml結尾,如order_mapper.xml

7.Jsp與html文件名所有小寫,單詞之間用_隔開,如order_list.jsp

8.Model層:持久層對象必須和表名一致,表現層對象一概使用vo結尾。用Request,response結尾。

編碼原則:

1.全部問題要採用縮進風格編寫,縮進的空格數爲4個

2.不容許把多個短語寫在一行中,即一行只寫一條語句

3.相對獨立的程序塊之間,變量說明以後必須加空行

4.必需要有註釋,源程序註釋量必須在30%以上,註釋可根據須要列出:做者,內容,功能,與

其餘類的關係等。功能詳細描述部分說明該類或者接口的功能。,做用,使用方法和注意事項,每次

修改後增長做者和更新版本號和日期。方法內的單行註釋用//,其餘用/**...**/

5.不容許提交編譯報錯和帶黃色警告的代碼

6.每一個類文件不超過2000行,每一個方法不超過150行。代碼寬度150列。

7.If-else不該嵌套太多,不能超過三層,若是嵌套太多,應該考慮調整你的邏輯或者換種實現

方式嵌套循環不超過三層。

8.日誌處理,通常的異常狀況都須要增長log日誌,儘可能不要用「System.out.println()」。

9.代碼原則上要放在大括號{}以內,若是隻有一行代碼也必須放在大括號之中,不容許省略,

而且大括號不容許與其中的代碼段在同一行。

10.不要在controller層作業務邏輯,統一在service層處理:controller層所作的事情是獲取入參,作

數據有效性校驗。完成後則拼裝DO並傳入service層作業務邏輯處理。

11.對外接口異常統一返回異常編碼和異常說明,內部正確使用異常,不要隨意就拋出一個異常,特別

是Exception異常。但在try-catch時儘可能捕獲具體異常,最好不要catch(Exception)這麼寫。

12.業務使用手動事務,後臺酌情考慮。不容許有大事務。(事務的傳播性考慮)aop配置事務必須指定到方法。

13.外部接口調用須要記錄日誌,數據表記錄等--提供外部的接口。

14.調用接口得到的返回值須要作對象非空,業務邏輯驗證等操做;調用接口的結果對象轉換爲本地定義

對象,避免接口修改通知不及時引發的系統異常。

15.系統功能及數據有合適的權限控制(好比菜單權限,水平權限)

16.沒有冗餘代碼(特別是-註釋就註釋一大片的那種);面向接口編程。

17.沒有硬編碼(如數據庫原配置,跳轉url,魔鬼數字,通用錯誤碼,bean初始化)

18.面向面向用戶端的接口,必須作安全校驗。

19.Update操做涉及多條或多表數據時,確保併發場景下無死鎖問題,批量更新多表按表名排序,

單表按主鍵排序。

20.無sql注入的漏洞(在編寫mybatis的映射語句時,儘可能採用「#{xxx}」這樣的格式。若不得不使用

「${xxx}」這樣的參數,要手工地作好過濾工做,防止sql注入(攻擊),不要用like,用selet * from

End_user where instr(user,;jun.’);

21.Spring.xml配置bean必定要有id且惟一(考慮jar包衝突)

22.第三方jar引入是否exclude了和如今又衝突的版本spring mybatis log4j等

23.Pom文件,版本控制放到最上面。

前端:

1.超過100行的js單獨提取成js腳本

2.前端的輸入參數,服務端必須校驗(防止js篡改等)

3.把樣式表放在body頭上

4.引用第三方js,容錯性須要作好

5.多瀏覽器環境支持

前端建議:

最小化JavaScript,考慮CDN

接口提供:

1.接口可擴展(入參xxRequest,出參xxResponse)

2.是否須要支持可重複調用

3.是否須要提供回滾接口

4.入參強制檢驗

5.Dao層考慮水平和垂直拆分的影響(是否須要路由,聚合函數分頁等如何處理)

6.重要數據操做,好比金額必定要有流水,不是簡單的日誌記錄(log老是多多益善)。

7.接口層統一返回對象,異常只能在接口內部處理,不能拋出來。返回對象包含3個基本屬性。

(1)返回編號

(2)返回數據

(3)返回消息

8.SoaResponse.java

依賴:

必須作異常處理,並區分業務異常和系統異常。

(是否須要重複調用第三方接口,調用第三方接口執行成功,可是結果超時,返回失敗應該如何處理

數據庫開發規範:

命名:

(1)庫名,表名,字段名,使用小寫字母

(2)庫名,表名,字段名,儘可能見名知意,使用下劃線分割

(3)不要超過30個字符

(4)禁止使用mysql保留字

(5)臨時庫,表名,必須以tmp爲前綴,以日期爲後綴,例如tmp_product_20130202

庫表設計:

(1)表必須有主鍵,使用bigint unsigned類型,主鍵只使用一個字段,使用auto_increment屬性,主鍵統一

使用id。

(2)全部字段都必須註釋全部表都必須有說明。

(3)訪問頻率低的或大字段放到擴展表裏,分離冷熱數據。

(4)多張關聯表之間,適當的冗餘字段,能夠減小join查詢

(5)依據查詢場景建適當的索引和增長備用的字段。

(6)若是預計數據量較大,預先制定分表策略,如按日期拆分或按某鍵值取模分表

索引建立

(1)如多個字段組合有惟一性須要,能夠建立惟一索引

(2)不在低基數(低篩選度)的列上創建索引,例如「性別」

(3)禁止冗餘索引,如已有(a,b)索引,能夠刪除(a)索引

(4)合理建立組合索引(a,b,c)至關於(a),(a,b),(a,b,c)

(5)組合索引的組成字段數儘可能不超過3個

(6)組合索引中,區分度大(高篩選度)的字段放在最前

(7)儘量利用索引完成排序,即排序的字段在索引裏

(8)禁止使用外鍵,防止死鎖,避免隱藏的數據邏輯

(9)數據掃描過多,如全部索引的過濾性不佳,會放棄使用索引

(10)僅使用最有效的過濾條件,索引不是越長越好,where條件不是越多越好

(11)Sqlmap後面把id加上/*sqlid*/

(12)普通索引按照「idx_字段名稱[_字段名稱]」進行命名,例如idx_uniq_age_name

(13)索引名必須所有使用小寫,過長的字段名能夠採用縮寫形式,例如idx_age_name_add

 

 注:筆記部分可能參考其餘做者內容的一個記錄,僅爲加深本身對概念的理解,這裏一些可能忘記參考誰的了,因此望見諒。

相關文章
相關標籤/搜索