阿里php开发规范,阿里巴巴java开发手册学习记录,php版
一.編程規(guī)約
(一)命名風(fēng)格
1.目錄使用小寫+下劃線 home,view,model,admin_view
2.
類 UpperCamelCase PhpMailer
方法 lowerCamelCase getUserName
屬性 lowerCamelCase tableName
函數(shù) 小寫字母和下劃線 get_client_ip
常量 全部大寫 PASSWORD
如果模塊、接口、類、方法使用了設(shè)計模式,在命名時需體現(xiàn)出具體模式。將設(shè)計模式體現(xiàn)在名字中,有利于閱讀者快速理解架構(gòu)設(shè)計理念。
(二)代碼格式
1.
// 這是示例注釋,請注意在雙斜線之后有一個空格
2.
if else的語言結(jié)構(gòu) 只在結(jié)束的地方換行
e.g.
if (flag == 1) {
System.out.println("world");
} else {
System.out.println("ok");
}
3.一行代碼不超過120字符,超過需要使用換行
單個方法的總行數(shù)不超過 80 行。
4.代碼邏輯分清紅花和綠葉,個性和共性,綠葉邏輯單獨出來成為額外方法,使主干代碼 更加清晰;共性邏輯抽取成為共性方法,便于復(fù)用和維護。
(三)OOP規(guī)約
1.所有的覆寫方法,必須加@Override注解
2.任何類、方法、參數(shù)、變量,嚴控訪問范圍。過于寬泛的訪問范圍,不利于模塊解耦。
如果是一個 private 的方法,想刪除就刪除,可是一個 public 的 service
成員方法或成員變量,刪除一下,不得手心冒點汗嗎
3.避免出現(xiàn)重復(fù)的代碼(Don’t Repeat Yourself),即DRY原則
二.安全規(guī)約
1.用戶輸入的 SQL 參數(shù)嚴格使用參數(shù)綁定或者 METADATA 字段值限定,防止 SQL 注入,
禁止直接使用前端傳來的字符串拼接 SQL 訪問數(shù)據(jù)庫。
三.MySQL規(guī)約
(一) 建表規(guī)約
1.任何字段如果為非負數(shù),必須是 unsigned
2.表達是與否概念的字段,必須使用 is_xxx 的方式命名,數(shù)據(jù)類型是 unsigned tinyint ( 1表示是,0表示否)
3.表名不使用復(fù)數(shù)名詞,表名應(yīng)該僅僅表示表里面的實體內(nèi)容,不應(yīng)該表示實體數(shù)量
4.唯一索引名為 uk_字段名,普通索引名則為 idx_字段名。
5.小數(shù)類型為 decimal,禁止使用 float 和 double。
//說明:float 和 double 在存儲的時候,存在精度損失的問題,很可能在值的比較時,得到不 正確的結(jié)果。如果存儲的數(shù)據(jù)范圍超過 decimal 的范圍,建議將數(shù)據(jù)拆成整數(shù)和小數(shù)分開存儲
6.varchar 是可變長字符串,不預(yù)先分配存儲空間,長度不要超過 5000,如果存儲長度大于此值,定義字段類型為 text,獨立出來一張表,用主鍵來對應(yīng),避免影響其它字段索引效率。
7.禁用保留字,如 desc、range、match、delayed desc//這個很容易誤用,以后換成descb
8.表必備三字段:id, gmt_create, gmt_modified。 說明:其中id必為主鍵,類型為bigint unsigned、單表時自增、步長為1。gmt_create, gmt_modified 的類型均為 datetime 類型,前者現(xiàn)在時表示主動創(chuàng)建,后者過去分詞表示被 動更新。//here
9.【推薦】單表行數(shù)超過 500 萬行或者單表容量超過 2GB,才推薦進行分庫分表。
(二) 索引規(guī)約
1.業(yè)務(wù)上具有唯一特性的字段,即使是組合字段,也必須建成唯一索引。 說明:不要以為唯一索引影響了 insert 速度,這個速度損耗可以忽略,但提高查找速度是明 顯的;另外,即使在應(yīng)用層做了非常完善的校驗和控制,只要沒有唯一索引,根據(jù)墨菲定律, 必然有臟數(shù)據(jù)產(chǎn)生。
2.超過三個表禁止 join。需要 join 的字段,數(shù)據(jù)類型保持絕對一致;多表關(guān)聯(lián)查詢時,保證被關(guān)聯(lián)的字段需要有索引。
3.利用覆蓋索引來進行查詢操作,來避免回表操作。
說明:如果一本書需要知道第 11 章是什么標(biāo)題,會翻開第 11 章對應(yīng)的那一頁嗎?
目錄瀏覽一下就好,這個目錄就是起到覆蓋索引的作用。
//這個例子舉的非常非常的好,以后用書和目錄來理解索引和數(shù)據(jù)是個非常好的方式
//extra列會出現(xiàn):using index
4.延遲關(guān)聯(lián)或者子查詢優(yōu)化超多分頁場景。
說明:MySQL 并不是跳過 offset 行,而是取 offset+N 行,然后返回放棄前 offset 行,返回 N 行,那當(dāng) offset 特別大的時候,效率就非常的低下,要么控制返回的總頁數(shù),要么縮減對要放棄的offset行的獲取成本。
正例:先快速定位需要獲取的 id 段,然后再關(guān)聯(lián):
SELECT a.* FROM 表 1 a, (select id from 表 1 where 條件 LIMIT 100000,20 ) b where a.id=b.id
5.在 varchar 字段上建立索引時,必須指定索引長度,沒必要對全字段建立索引,根據(jù)實際文本區(qū)分度決定索引長度即可。
6.SQL 性能優(yōu)化的目標(biāo):至少要達到 range 級別,要求是 ref 級別,如果可以是 consts 最好。
說明:
1)consts 單表中最多只有一個匹配行(主鍵或者唯一索引),在優(yōu)化階段即可讀取到數(shù)據(jù)。
2)ref 指的是使用普通的索引(normal index)。
3)range 對索引進行范圍檢索。
7.防止因字段類型不同造成的隱式轉(zhuǎn)換,導(dǎo)致索引失效。
select id from qs_video_update where bid = 73836918995;
select id from qs_video_update where bid = '73836918995';//explain一下天壤之別了
(三)sql語句
1.count(*)就是 SQL92 定義 的標(biāo)準(zhǔn)統(tǒng)計行數(shù)的語法,跟數(shù)據(jù)庫無關(guān),跟 NULL 和非 NULL 無關(guān)。
說明:count(*)會統(tǒng)計值為 NULL 的行,而 count(列名)不會統(tǒng)計此列為 NULL 值的行。
總結(jié)
以上是生活随笔為你收集整理的阿里php开发规范,阿里巴巴java开发手册学习记录,php版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: D语言_百度百科
- 下一篇: 动态规划算法php,php算法学习之动态