[温故知新] 编程原则和模式
寫了這么多年代碼,依舊做不好一個(gè)項(xiàng)目
做好一個(gè)項(xiàng)目是人力、產(chǎn)品、業(yè)務(wù)、技術(shù)、運(yùn)營(yíng)的結(jié)合,可能還疊加一點(diǎn)時(shí)機(jī)的因素,就我們碼農(nóng)而言,工作就是搬磚,實(shí)現(xiàn)產(chǎn)品, 給業(yè)務(wù)提供支撐。
“給祖?zhèn)鞔a加 BUG 修 BUG”,“拿起鍵盤一把梭”這些戲謔程序員的話,聽多了真的會(huì)讓程序員麻木,仿佛大家都是這么干的。
從業(yè)多年,堆過 shi 山,接手過祖?zhèn)鞔a, 已經(jīng)不能沉下氣去查看、調(diào)試 shi 山代碼, 說實(shí)話,很累。
本人一直推崇寫流暢、自然、可自解釋的代碼,讓優(yōu)雅成為一種習(xí)慣, 給自己留個(gè)念想、給后人留個(gè)好評(píng)。
溫故而知新,聊一聊現(xiàn)代編程幾大常見的編程原則
| KISS (Keep It Simple Stupid) | 保持系統(tǒng)結(jié)構(gòu)簡(jiǎn)單可信賴 |
| YAGNI (you aren't gonna need it) | 當(dāng)前確實(shí)需要,再去做 |
| Do The Simplest Things That Could Possibly Work | 思考最簡(jiǎn)單可行的辦法 |
| Separation of Concerns | 關(guān)注點(diǎn)分離 |
| Keep Things DRY | 保持代碼結(jié)構(gòu)清爽 Don't repeat yourself |
| Code For The Maintainer | 站在維護(hù)者角度寫代碼 |
| Avoid Premature Optimization | 避免提前優(yōu)化 |
| Boy-Scout Rule | 清掃戰(zhàn)場(chǎng):清理口水話注釋、無效代碼 |
| Minimise Coupling | 低耦合 |
| Law of Demeter | Don't talk to strangers,對(duì)象方法只接觸該接觸的對(duì)象、字段、入?yún)?/td> |
| Composition Over Inheritance | 組合而不是繼承 |
| Orthogonality | 正相關(guān),概念上不相關(guān)的事物不應(yīng)在系統(tǒng)中強(qiáng)行相關(guān) |
| Robustness Principle | 代碼健壯性 |
| Inversion of Control | 控制反轉(zhuǎn) |
| Maximise Cohesion | 高內(nèi)聚 |
| Likov Substitution Principle | 里斯替代原則:將程序中對(duì)象替換到子類型實(shí)例,不會(huì)報(bào)錯(cuò)。 |
| Open/Closed Principle | 設(shè)計(jì)的實(shí)體對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉 |
| Single Responsiblity Principle | 單一責(zé)任原則 |
| Hide Implementation Details | 隱藏實(shí)施細(xì)節(jié) |
| Curly's Law | 柯里定律:為確定目標(biāo)編寫特定代碼 |
| Encapsulate What Changes | 封裝變化 |
| Interface Segregation Principle | 接口隔離原則 |
| Command Query Separation | 命令查詢分離 |
KISS
大多數(shù)系統(tǒng)保持簡(jiǎn)單,會(huì)運(yùn)行的很好。
更少的代碼消耗更好的時(shí)間,產(chǎn)生更少的 bug,并且容易修改
復(fù)雜業(yè)務(wù)都是由簡(jiǎn)單代碼堆砌而成
完美并不是“沒有什么東西可以再加”,而是“沒有什么東西可以被去掉”
YAGNI
YAGNI 代表“you aren't gonna need it.”,不要自以為是的提前實(shí)現(xiàn)某些邊角,直到真正需要的時(shí)候,再來做。
提前做明天才需要做的工作,意味著當(dāng)前迭代中需要花費(fèi)更多精力
導(dǎo)致代碼膨脹,軟件變得臃腫且復(fù)雜
Separation of Concerns
關(guān)注點(diǎn)分離是一種將計(jì)算機(jī)程序分為不同部分的設(shè)計(jì)原則,這樣每個(gè)部分都可以解決一個(gè)單獨(dú)的關(guān)注點(diǎn)。例如應(yīng)用程序的業(yè)務(wù)邏輯是一個(gè)問題,而用戶界面是另外一個(gè)問題,更改用戶界面不應(yīng)要求更改業(yè)務(wù)邏輯,反之亦然。
簡(jiǎn)化應(yīng)用程序的開發(fā)和維護(hù)
如果關(guān)注點(diǎn)分離得很好,則各個(gè)部分可以重復(fù)使用,也可以獨(dú)立開發(fā)和更新。
Interface Segregation Principle
接口隔離,將胖接口修改為多個(gè)小接口,調(diào)用接口的代碼應(yīng)該比實(shí)現(xiàn)接口的代碼更依賴于接口。
why:如果一個(gè)類實(shí)現(xiàn)了胖接口的所有方法(部分方法在某次調(diào)用時(shí)并不需要),那么在該次調(diào)用時(shí)我們就會(huì)發(fā)現(xiàn)此時(shí)出現(xiàn)了(部分并不需要的方法),而并沒有機(jī)制告訴我們我們現(xiàn)在不應(yīng)該使用這部分方法。
how: 避免胖接口,類永遠(yuǎn)不必實(shí)現(xiàn)違反單一職責(zé)原則的接口。可以根據(jù)實(shí)際多職責(zé)劃分為多接口,類實(shí)現(xiàn)多接口后, 在調(diào)用時(shí)以特定接口指代對(duì)象,這樣這個(gè)對(duì)象只能體現(xiàn)特定接口的方法,以此體現(xiàn)接口隔離。
Command Query Separation
命令查詢分離: 操作方法就只寫操作邏輯,查詢方法就只寫查詢邏輯,并以明顯的方法名區(qū)分自己的動(dòng)作。
有了這個(gè)原則,程序員可以更加自信地進(jìn)行編碼:由于查詢方法不會(huì)改變狀態(tài),因此可以在任何地方以任何順序使用,使用操作方法時(shí),也心中有數(shù)。
End
懂得這么多道理,卻依舊過不好這一生。前人總結(jié)的編程原則和方法論需要在實(shí)踐中感悟,束之高閣,則始終不能體會(huì)編程的魅力和快感。
總結(jié)
以上是生活随笔為你收集整理的[温故知新] 编程原则和模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三分钟学会.NET Core Jwt 策
- 下一篇: 微前端与项目实施方案研究