Periaatteiden soveltaminen SOLID C#:ssa: Esimerkkejä ja parhaita käytäntöjä

Single Responsibility Principle(SRP)

Tämä periaate edellyttää, että jokaisella luokalla tulee olla yksi vastuu. Se korostaa, että luokan tulee suorittaa yksi tietty tehtävä, eikä sillä saa olla liikaa syitä muuttua.

Esimerkki: Käyttäjätietojen hallinta ja sähköposti-ilmoitusten lähettäminen.

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)

Tämä periaate kannustaa laajentamaan toimintoja lisäämällä uutta koodia olemassa olevan koodin muokkaamisen sijaan.

Esimerkki: Eri maksutapojen käsittely verkkokauppasovelluksessa.

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)

Tämä periaate väittää, että johdetun luokan objektien tulee olla korvattavissa perusluokan objekteilla vaikuttamatta ohjelman oikeellisuuteen.

Esimerkki: Geometristen muotojen hallinta.

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)

Tämä periaate neuvoo jakamaan rajapinnat pienempiin, jotta vältytään pakottamasta luokkia toteuttamaan menetelmiä, joita he eivät tarvitse.

Esimerkki: Liitännät tietojen päivittämistä ja näyttämistä varten.

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

Dependency Inversion Principle(DIP)

Tämä periaate ehdottaa riippuvuusinjektion käyttöä riippuvuuksien hallintaan.

Esimerkki: Riippuvuuslisäyksen käyttö riippuvuuksien hallintaan.

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

Muista, että periaatteiden soveltaminen SOLID C#:ssa tulee tehdä joustavasti projektisi erityistavoitteen sekä SOLID C#:n ymmärryksesi perusteella.