設計原則

你好呀嗯嗯發表於2024-08-24

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.開閉原則:對擴充套件開放,對修改關閉

相關文章