欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#語言中的 SOLID 原則

admin
2024年8月28日 21:58 本文熱度 611

SOLID 原則是一套指南,可以幫助開發(fā)人員創(chuàng)建更易于維護(hù)、易于理解和靈活的軟件。這些原則是由 Robert C. Martin(Uncle Bob)提出的,并在面向?qū)ο缶幊躺鐓^(qū)中被廣泛采用。在本文中,我們將探討每個(gè) SOLID 原則,并了解如何在 C# 中應(yīng)用它們。

1. Single Responsibility Principle (SRP)

定義:一個(gè)類應(yīng)該只有一個(gè)改變的原因,這意味著它應(yīng)該只有一個(gè)工作或職責(zé)。

說明:SRP 旨在通過確保每個(gè)類處理單個(gè)功能來解耦代碼。這使得代碼更易于理解、測試和維護(hù)。

public class Invoice  
{  
   public void GenerateInvoice()  
   {  
       // Code to generate invoice  
   }  
 
   public void PrintInvoice()  
   {  
       // Code to print invoice  
   }  
}

在這里,該類有兩個(gè)職責(zé):生成和打印發(fā)票。為了遵守 SRP,我們應(yīng)該將這些職責(zé)分開:Invoice

public class InvoiceGenerator  
{  
   public void GenerateInvoice()  
   {  
       // Code to generate invoice  
   }  
}  
 
public class InvoicePrinter  
{  
   public void PrintInvoice()  
   {  
       // Code to print invoice  
   }  
}

2. Open/Closed Principle (OCP)

定義:軟件實(shí)體(類、模塊、函數(shù)等)應(yīng)該開放以供擴(kuò)展,但要關(guān)閉以供修改。

說明:OCP 鼓勵(lì)以一種允許在不修改現(xiàn)有代碼的情況下擴(kuò)展行為的方式進(jìn)行軟件設(shè)計(jì)。這可以通過抽象來實(shí)現(xiàn),例如接口和抽象類。

示例

public class Rectangle  
{  
   public double Width { get; set; }  
   public double Height { get; set; }  
 
   public double Area()  
   {  
       return Width * Height;  
   }  
}  
 
public class Circle  
{  
   public double Radius { get; set; }  
 
   public double Area()  
   {  
       return Math.PI * Radius * Radius;  
   }  
}

為了遵守 OCP,我們可以引入一個(gè)接口:

public interface IShape  
{  
   double Area();  
}  
 
public class Rectangle : IShape  
{  
   public double Width { get; set; }  
   public double Height { get; set; }  
 
   public double Area()  
   {  
       return Width * Height;  
   }  
}  
 
public class Circle : IShape  
{  
   public double Radius { get; set; }  
 
   public double Area()  
   {  
       return Math.PI * Radius * Radius;  
   }  
}

現(xiàn)在,可以在不修改現(xiàn)有 or 類的情況下添加新形狀。RectangleCircle

3. Liskov Substitution Principle (LSP)

定義:子類型必須可以替換其基本類型,而不改變程序的正確性。

說明:LSP 確保派生類在不更改其行為的情況下擴(kuò)展基類。此原則對于維護(hù)可靠的繼承層次結(jié)構(gòu)至關(guān)重要。

示例

public class Bird  
{  
   public virtual void Fly()  
   {  
       // Fly  
   }  
}  
 
public class Penguin : Bird  
{  
   public override void Fly()  
   {  
       throw new NotSupportedException("Penguins can't fly.");  
   }  
}

在此示例中,違反了 LSP,因?yàn)樗鼰o法飛行。更好的方法是創(chuàng)建一個(gè)單獨(dú)的層次結(jié)構(gòu):Penguin

public abstract class Bird  
{  
   public abstract void Move();  
}  
 
public class FlyingBird : Bird  
{  
   public override void Move()  
   {  
       // Fly  
   }  
}  
 
public class NonFlyingBird : Bird  
{  
   public override void Move()  
   {  
       // Walk  
   }  
}

4. Interface Segregation Principle (ISP)

定義:不應(yīng)強(qiáng)迫客戶端依賴于他們不使用的接口。

說明:ISP 主張創(chuàng)建小型的特定接口,而不是大型的通用接口。這樣可以防止實(shí)現(xiàn)類被它們不需要的方法所累。

public interface IWorker  
{  
   void Work();  
   void Eat();  
}  
 
public class Worker : IWorker  
{  
   public void Work()  
   {  
       // Work  
   }  
 
   public void Eat()  
   {  
       // Eat  
   }  
}  
 
public class Robot : IWorker  
{  
   public void Work()  
   {  
       // Work  
   }  
 
   public void Eat()  
   {  
       throw new NotImplementedException();  
   }  
}

在此示例中,不需要該方法。我們可以通過拆分接口來遵守 ISP:RobotEat

public interface IWorkable  
{  
   void Work();  
}  
 
public interface IFeedable  
{  
   void Eat();  
}  
 
public class Worker : IWorkable, IFeedable  
{  
   public void Work()  
   {  
       // Work  
   }  
 
   public void Eat()  
   {  
       // Eat  
   }  
}  
 
public class Robot : IWorkable  
{  
   public void Work()  
   {  
       // Work  
   }  
}

5. Dependency Inversion Principle (DIP)

定義:高級模塊不應(yīng)依賴于低級模塊。兩者都應(yīng)該依賴于抽象。抽象不應(yīng)該依賴于細(xì)節(jié)。細(xì)節(jié)應(yīng)該取決于抽象。

說明:DIP旨在通過使用抽象(接口或抽象類)來解耦依賴關(guān)系,從而減少高級模塊和低級模塊之間的耦合。

示例

public class Light  
{  
   public void TurnOn()  
   {  
       // Turn on the light  
   }  
 
   public void TurnOff()  
   {  
       // Turn off the light  
   }  
}  
 
public class Switch  
{  
   private readonly Light _light;  
 
   public Switch(Light light)  
   {  
       _light = light;  
   }  
 
   public void Operate()  
   {  
       _light.TurnOn();  
   }  
}

為了遵守 DIP,我們可以引入一個(gè)接口:Light

public interface ISwitchable  
{  
   void TurnOn();  
   void TurnOff();  
}  
 
public class Light : ISwitchable  
{  
   public void TurnOn()  
   {  
       // Turn on the light  
   }  
 
   public void TurnOff()  
   {  
       // Turn off the light  
   }  
}  
 
public class Switch  
{  
   private readonly ISwitchable _switchable;  
 
   public Switch(ISwitchable switchable)  
   {  
       _switchable = switchable;  
   }  
 
   public void Operate()  
   {  
       _switchable.TurnOn();  
   }  
}

現(xiàn)在,類依賴于抽象而不是具體類。SwitchISwitchableLight

SOLID 原則是設(shè)計(jì)健壯、可維護(hù)和可擴(kuò)展的面向?qū)ο筌浖幕緶?zhǔn)則。通過在 C# 項(xiàng)目中遵循這些原則,可以創(chuàng)建更易于理解、擴(kuò)展和維護(hù)的代碼。


該文章在 2024/8/29 12:25:13 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved