1.單一職責原則
/// <summary> /// 一個類只負責一件事 /// 擴充套件升級,減少修改,直接增加類 /// 方便程式碼重用 /// 簡單-穩定-強大 /// /// 方法層面:方法多個分支,還可能擴充套件變化,最後拆分成多個方法 /// 類:接受輸入--資料驗證--邏輯計算--資料庫操作--日誌 /// 介面:也會把不同的功能介面,獨立開來 /// 類庫:把專案分成多個類庫,重用-方便維護
2.里氏替換原則:任何使用基類的地方,都可以透明的使用子類
透明:就是安全,父類的東西換成子類後不影響程式,基於里氏替換原則,寫程式有以下的建議
a.父類已經實現的東西,子類不要去new 去隱藏
b.父類已經實現的東西,想改的化,就必須用virtual + override 避免埋雷
宣告變數、引數、屬性、欄位最好都是基於基類的
ParentClass instance = new ChildClass(); instance.CommonMethod(); //普通方法由左邊決定,編譯時決定(執行父類的方法) instance.VirtualMethod(); //虛方法由右邊決定,執行時決定(執行子類的方法) instance.AbstraceMethod()//抽象方法由右邊決定,執行時決定(執行子類的方法)
3.迪米特法則(最少知道原則):一個物件應該對其他物件保持最少的瞭解
/// 高內聚,低耦合:高度封裝,類與類之間減少依賴
/// 只對直接物件進行關聯,不對間接物件進行關聯;針對欄位,使用private/protect修飾符,也是為了減少其他物件的對自己的瞭解
/// 門面(外觀)模式 /中介者模式
class School { public int Id { get; set; } public string SchoolName { get; set; } public List<Class> ClassList { get; set; } public void Manage() { foreach (var c in ClassList) { c.Manage();//遵循了迪米特法則 List<Student> studentList = c.StudentList;//違反了迪米特法則 } } }
4.依賴倒置原則:高層模組不應該依賴於底層模組,二者應該透過抽象實現
/// 依賴抽象,更具有通用性,而且具備擴充套件性;
///
/// 面向抽象程式設計,底層模組裡面儘量都有抽象類/介面。
5.介面隔離原則:
/// 介面隔離原則:客戶端不應該依賴它不需要的介面;
/// 一個類對另一個類的依賴應該建立在最小的介面上
/// 實現一個介面的時候,只需要自己必須的功能
///
/// 介面不能太大,否則會實現不需要的功能
/// 介面還是要儘量的小,但是一致的功能時應該要放在一起的
/// 介面合併:如果一個業務多個固定步驟,我們不應該把步驟都暴漏,而是提供一個入口即可
Net框架中有時候明明看到了已經繼承了某個介面,卻找不到實現在哪裡(實現在了父類中)
6.開閉原則:對擴充套件開放,對修改關閉