Поиск…


Вступление

Что такое SOLID?

SOLID - это мнемоническая (память) акроним. Принципы Solid должны помочь разработчикам программного обеспечения избегать «запахов кода» и привести к хорошему исходному коду. Хороший исходный код означает в этом контексте, что исходный код легко расширяется и поддерживается. Основным направлением принципов Solid являются классы

Что ожидать:

Почему вы должны применять SOLID

Как применять пять принципов SOLID (примеры)

SRP - принцип единой ответственности

S в SOLID означает принцип единой ответственности (SRP).

Ответственность означает в этом контексте поводы для изменения, поэтому в принципе говорится, что у класса должна быть только одна причина для изменения.

Роберт К. Мартин заявил об этом (во время своей лекции в Yale shool of management в 10 Sep 2014) следующим образом

Вы также можете сказать, не ставьте функции, которые меняются по разным причинам в одном классе.

или же

Не смешивайте проблемы в своих классах

Причина применения СРП:

Когда вы меняете класс, вы можете повлиять на функциональность, связанную с другими обязанностями класса. Сохранение ответственности на низком уровне сводит к минимуму риск возникновения побочных эффектов.

Плохой пример

У нас есть интерфейс IWallet и класс кошелька, который реализует IWallet. Кошелек держит наши деньги и бренд, кроме того, он должен печатать наши деньги как строковое представление. Класс используется

  1. веб-сервис
  2. текстовый редактор, который печатает деньги в евро в текстовый файл.

Плохой пример

СРП здесь нарушена, потому что у нас есть две проблемы:

  1. Сохранение денег и брендов
  2. Представление денег.

Пример кода 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();
    }
}

Хороший пример

Хороший пример

Чтобы избежать нарушения SRP, мы удалили метод printMoney из класса «Кошелек» и поместили его в класс «Принтер». Класс принтера теперь отвечает за печать, и теперь Кошелек отвечает за сохранение значений.

Пример кода 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow