抽象類與接口區(qū)別
語法上:抽象類:有屬性,可以有方法具體實現(xiàn),子類必須實現(xiàn)父類的抽象方法 ;接口:接口只有方法定義贡茅,沒有屬性和方法實現(xiàn)
場景上:抽象類:is-a的關(guān)系,解決代碼重用問題;接口:has-a關(guān)系顶考,為了和代碼解耦赁还,可以理解成一種協(xié)議
2.基于接口編程而不是實現(xiàn)編程
ImageStore image = new PrivateImageStore() 這種代碼如何避免
配置文件+反射/工程模式
為什么建議多用組合少用繼承
用組合、繼承驹沿、委托可以替代繼承(多態(tài)艘策、代碼復(fù)用、is-a)
繼承層級過深不利于理解和擴(kuò)展性和維護(hù)性
vo甚负、bo柬焕、Entity代碼很多重復(fù),可以用組合方式或者繼承一個基類
業(yè)務(wù)上常用的基于貧血模式的MVC違反了OOP嗎梭域?
Repository+Service+Control這種數(shù)據(jù)和方法隔離的方式 典型的面向過程的編程方式斑举,稱為貧血模式:業(yè)務(wù)在Service,Bo只有數(shù)據(jù)沒有業(yè)務(wù)
DDD(Domain Driven Design)領(lǐng)域驅(qū)動設(shè)計 充血模式:Domain 相當(dāng)于貧血模式的Bo 不過同時包含業(yè)務(wù)和數(shù)據(jù)
solid(單一責(zé)任制病涨、開閉原則富玷、里式替換原則、接口隔離原則既穆、控制反轉(zhuǎn)原則)
里式替換:與多態(tài)相似赎懦,不同點(diǎn)在于里式替換不能改變父類的邏輯
控制反轉(zhuǎn):控制指的是對程序流程控制,反轉(zhuǎn)指的是本來由程序員控制整個流程幻工,交給了程序去控制
依賴注入:編碼技巧励两,不在類里面new方式去創(chuàng)建對象,而是在外面創(chuàng)建好囊颅,通過參數(shù)去傳遞
依賴注入框架
名詞解釋
Kiss原則:Keep it short And Simple 保持代碼簡單
YAGNI原則:You Ain't Gone Need it 不去編寫不需要的代碼
DRY原則: Don't Repeat YouSelf 不要編寫重復(fù)的代碼
改善代碼質(zhì)量的建議
命名
長度:類名可以表達(dá)準(zhǔn)確點(diǎn)当悔,不簡寫,變量名可以簡寫點(diǎn)
利用上下文簡寫變量名: 比如 Class User ---> name 而不用userName
命名可讀可搜索:比如插入數(shù)據(jù) 用的是insertXXX 就不要再用addXXX
接口和抽象類命名 IUserService---->UserService 或 UserService----->UserServiceImpl 抽象類 AbstractConfiguration
注釋
注釋 why what how
維護(hù)注釋也需要成本
代碼風(fēng)格
代碼行長度踢代、類長度盲憎、函數(shù)長度 控制
類成員排列(靜態(tài) public protected private)
import導(dǎo)入排列 (按字母順序)
編碼技巧
排除復(fù)雜方法
不要用參數(shù)控制程序執(zhí)行
if else不要過多嵌套
程序出錯 返回:錯誤碼、NUll值胳挎、空對象饼疙、異常對象(吞掉,打印日志慕爬;直接拋出窑眯,包裝拋出)
濫用get set 返回的集合(不可變)
Constant和Utils不要設(shè)計大而全,修改一處医窿,依賴的全部要重新編譯
最后編輯于 :2020.08.11 11:17:39
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者