你應(yīng)該知道的主要軟件設(shè)計(jì)原則
軟件設(shè)計(jì)原則指導(dǎo)開發(fā)人員創(chuàng)建高效、可擴(kuò)展和可維護(hù)的軟件。遵循這些原則,開發(fā)人員可以編寫更容易閱讀、測(cè)試和擴(kuò)展的代碼,降低總體擁有成本,并使團(tuán)隊(duì)協(xié)作更加高效。
以下是一些最基本的軟件設(shè)計(jì)原則:
1.關(guān)注點(diǎn)分離
應(yīng)用程序應(yīng)分為具有較少功能重疊的離散功能模塊。減少交互點(diǎn)對(duì)于實(shí)現(xiàn)強(qiáng)內(nèi)聚和低耦合至關(guān)重要。盡管每個(gè)功能模塊內(nèi)的封閉功能有所不同,但在不適當(dāng)?shù)倪吔缣幏蛛x功能可能導(dǎo)致功能之間的過度耦合和復(fù)雜性。
2.面向?qū)ο缶幊淘瓌t
- 封裝(Encapsulation):將數(shù)據(jù)與操作這些數(shù)據(jù)的方法捆綁在一起。它限制了對(duì)對(duì)象某些組件的直接訪問,防止數(shù)據(jù)被無意干擾和濫用。
- 抽象(Abstraction):使用簡單的類來表示復(fù)雜性。它隱藏了復(fù)雜的現(xiàn)實(shí),僅暴露必要的部分。
- 繼承(Inheritance):允許一個(gè)類(子類)繼承另一個(gè)類(父類)的屬性和行為(方法)。
- 多態(tài)性(Polymorphism):允許一個(gè)實(shí)體被視為一個(gè)通用類別,并能夠以多種形式存在。例如,一個(gè)特定的類可以被視為其父類或其實(shí)現(xiàn)的接口之一。
3.SOLID 原則 — 設(shè)計(jì)原則指導(dǎo)開發(fā)人員創(chuàng)建可維護(hù)、可擴(kuò)展和高效的面向?qū)ο筌浖到y(tǒng)。
- 單一職責(zé)原則(Single Responsibility Principle,SRP):一個(gè)類/服務(wù)/API 應(yīng)該只有一個(gè)改變的原因,這意味著它應(yīng)該只有一個(gè)職責(zé)或功能。
- 開閉原則(Open/Closed Principle,OCP):軟件實(shí)體(類、模塊、函數(shù)等)應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。這意味著你可以添加新功能而不更改現(xiàn)有代碼。
- 里氏替換原則(Liskov Substitution Principle,LSP):你應(yīng)該能夠使用任何子類替代父類,并期望它能正常工作。這意味著一個(gè)使用基類類型的程序在傳遞一個(gè)派生類(子類)類型時(shí)應(yīng)該仍然能夠正常工作,而無需知道它。
- 接口隔離原則(Interface Segregation Principle,ISP):一個(gè)類不應(yīng)該被迫實(shí)現(xiàn)它不使用的接口。這意味著應(yīng)該為每個(gè)類創(chuàng)建特定的接口,而不是一個(gè)大而全的接口。
- 依賴倒置原則(Dependency Inversion Principle,DIP):高層模塊不應(yīng)該依賴于低層模塊。兩者都應(yīng)該依賴于抽象。抽象不應(yīng)該依賴于細(xì)節(jié)。細(xì)節(jié)應(yīng)該依賴于抽象。這意味著你應(yīng)該依賴于抽象而不是具體實(shí)現(xiàn)。
4.不要重復(fù)自己
避免代碼中的重復(fù),這可能導(dǎo)致不一致和錯(cuò)誤。重用代碼而不是復(fù)制代碼。然而,在某些情況下,復(fù)制是更好的選擇。
5.保持簡單
保持代碼盡可能簡單和直接。簡單的代碼更容易理解和維護(hù),并且更不容易出錯(cuò)。
6.你不會(huì)需要它
避免通過僅在需要時(shí)添加功能來增加不必要的復(fù)雜性。在某些情況下,如果開發(fā)成本非常高或存在顯著的設(shè)計(jì)失敗,可能需要提前進(jìn)行詳細(xì)的設(shè)計(jì)和測(cè)試。如果你的應(yīng)用需求不明確或預(yù)期設(shè)計(jì)會(huì)隨著時(shí)間的推移而改變,不要過早進(jìn)行過多的設(shè)計(jì)工作。
7.迪米特法則或最少知識(shí)原則
一個(gè)對(duì)象只應(yīng)與其直接的朋友通信,不應(yīng)了解其他對(duì)象的內(nèi)部工作。
8.組合優(yōu)于繼承
優(yōu)先使用對(duì)象組合而不是類繼承,因?yàn)樗屿`活,有助于避免大型繼承層次結(jié)構(gòu)帶來的問題。
9.最小驚訝原則或最小意外原則
建議系統(tǒng)的行為應(yīng)盡可能不讓用戶感到驚訝或困惑(即它應(yīng)該按大多數(shù)用戶的預(yù)期行為)。例如,如果你有一個(gè)用戶賬戶服務(wù),更新用戶數(shù)據(jù)應(yīng)該由一個(gè) UpdateUserData() 方法完成,而不應(yīng)該是一個(gè)名為 RebuildUserData() 的方法。