Szukaj…


Wprowadzenie

Co to jest SOLID?

SOLID jest akronimem mnemonicznym (pomoc pamięci). Solidne zasady powinny pomóc twórcom oprogramowania unikać „zapachów kodu” i powinny prowadzić do dobrego kodu źródłowego. Dobry kod źródłowy oznacza w tym kontekście, że kod źródłowy jest łatwy do rozszerzenia i utrzymania. Podstawowym celem zasad Solid są klasy

Czego oczekiwać:

Dlaczego powinieneś zastosować SOLID

Jak zastosować pięć zasad SOLID (przykłady)

SRP - Zasada pojedynczej odpowiedzialności

S in SOLID oznacza zasadę pojedynczej odpowiedzialności (SRP).

Odpowiedzialność oznacza w tym kontekście powody do zmiany, więc zasada mówi, że klasa powinna mieć tylko jeden powód do zmiany.

Robert C. Martin stwierdził (podczas swojego wykładu w Yale shool of management 10 września 2014) w następujący sposób

Można również powiedzieć, nie umieszczaj funkcji zmieniających się z różnych powodów w tej samej klasie.

lub

Nie mieszaj obaw w swoich klasach

Powód zastosowania SRP:

Zmiana klasy może wpłynąć na funkcjonalność związaną z innymi obowiązkami klasy. Utrzymywanie obowiązków na niskim poziomie minimalizuje ryzyko wystąpienia działań niepożądanych.

Zły przykład

Mamy interfejs IWallet i klasę Wallet, która implementuje IWallet. Portfel przechowuje nasze pieniądze i markę, a ponadto powinien wydrukować nasze pieniądze jako ciąg znaków. Z tej klasy korzysta

  1. usługa internetowa
  2. autor tekstów, który drukuje pieniądze w euro na plik tekstowy.

Zły przykład

Naruszono tutaj SRP, ponieważ mamy dwie obawy:

  1. Przechowywanie pieniędzy i marki
  2. Reprezentacja pieniędzy.

Przykładowy kod w C #

public interface IWallet
{
    void setBrand(string brand);
    string getBrand();
    void setMoney(decimal money);
    decimal getMoney();
    string printMoney();
}

public class Wallet : IWallet
{
    private decimal m_Money;
    private string m_Brand;

    public string getBrand()
    {
        return m_Brand;
    }

    public decimal getMoney()
    {
        return m_Money;
    }

    public void setBrand(string brand)
    {
        m_Brand = brand;
    }

    public void setMoney(decimal money)
    {
        m_Money = money;
    }

    public string printMoney()
    {
        return m_Money.ToString();
    }
}

Dobry przykład

Dobry przykład

Aby uniknąć naruszenia SRP, usunęliśmy metodę printMoney z klasy Wallet i umieściliśmy ją w klasie Printer. Klasa Printer jest teraz odpowiedzialna za drukowanie, a Portfel jest teraz odpowiedzialny za przechowywanie wartości.

Przykładowy kod w C #

public interface IPrinter
{
    void printMoney(decimal money);
}

public class EuroPrinter : IPrinter
{
    public void printMoney(decimal money)
    {
        //print euro
    }
}

public class DollarPrinter : IPrinter
{
    public void printMoney(decimal money)
    {
        //print Dollar
    }
}

public interface IWallet
{
    void setBrand(string brand);
    string getBrand();
    void setMoney(decimal money);
    decimal getMoney();
}

public class Wallet : IWallet
{
    private decimal m_Money;
    private string m_Brand;

    public string getBrand()
    {
        return m_Brand;
    }

    public decimal getMoney()
    {
        return m_Money;
    }

    public void setBrand(string brand)
    {
        m_Brand = brand;
    }

    public void setMoney(decimal money)
    {
        m_Money = money;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow