Stosowanie SOLID zasad w języku C#: przykłady i najlepsze praktyki

Single Responsibility Principle(SRP)

Zasada ta mówi, że każda klasa powinna mieć jedną odpowiedzialność. Podkreśla, że ​​klasa powinna pełnić jedną określoną funkcję i nie mieć zbyt wielu powodów do zmian.

Przykład: Zarządzanie informacjami o użytkownikach i wysyłanie powiadomień e-mail.

class UserManager {  
  public void CreateUser(UserData userData) {  
    // Logic to create a user  
  }  
}  
  
class EmailService {  
  public void SendEmail(EmailData emailData) {  
    // Logic to send an email  
  }  
}  

Open/Closed Principle(OCP)

Ta zasada zachęca do rozszerzania funkcjonalności przez dodawanie nowego kodu zamiast modyfikowania istniejącego kodu.

Przykład: obsługa różnych metod płatności w aplikacji e-commerce.

abstract class PaymentProcessor {  
  public abstract void ProcessPayment();  
}  
  
class CreditCardPaymentProcessor: PaymentProcessor {  
  public override void ProcessPayment() {  
    // Logic to process credit card payment  
  }  
}  
  
class PayPalPaymentProcessor: PaymentProcessor {  
  public override void ProcessPayment() {  
    // Logic to process PayPal payment  
  }  
}  

Liskov Substitution Principle(LSP)

Zasada ta zakłada, że ​​obiekty klasy pochodnej powinny być zastępowalne obiektami klasy bazowej bez wpływu na poprawność programu.

Przykład: Zarządzanie kształtami geometrycznymi.

abstract class Shape {  
  public abstract double CalculateArea();  
}  
  
class Rectangle: Shape {  
  public override double CalculateArea() {  
    // Logic to calculate area of rectangle  
  }  
}  
  
class Square: Shape {  
  public override double CalculateArea() {  
    // Logic to calculate area of square  
  }  
}  

Interface Segregation Principle(ISP)

Ta zasada zaleca dzielenie interfejsów na mniejsze, aby uniknąć zmuszania klas do implementowania metod, których nie potrzebują.

Przykład: Interfejsy do aktualizacji i wyświetlania danych.

interface IUpdateableFeature {  
  void UpdateFeature();  
}  
  
interface IDisplayableFeature {  
  void DisplayFeature();  
}  

Dependency Inversion Principle(DIP)

Ta zasada sugeruje użycie iniekcji zależności do zarządzania zależnościami.

Przykład: Używanie wstrzykiwania zależności do zarządzania zależnościami.

class OrderProcessor {  
  private readonly DBConnection _dbConnection;  
  private readonly EmailService _emailService;  
  
  public OrderProcessor(DBConnection dbConnection, EmailService emailService) {  
    _dbConnection = dbConnection;  
    _emailService = emailService;  
  }  
}  

Pamiętaj, że stosowanie SOLID zasad w języku C# powinno odbywać się elastycznie, w oparciu o konkretny cel projektu i zrozumienie języka SOLID C#.