Buscar..


Introducción

¿Qué es SOLID?

SOLID es un acrónimo mnemotécnico (ayuda de memoria). Los principios de Solid deberían ayudar a los desarrolladores de software a evitar los "olores de código" y deberían conducir a un buen código fuente. Un buen código fuente significa en este contexto que el código fuente es fácil de extender y mantener. El enfoque principal de los principios sólidos son las clases.

Que esperar:

¿Por qué deberías aplicar SOLID?

Cómo aplicar los cinco principios SÓLIDOS (ejemplos)

SRP - Principio de responsabilidad única

La S en SOLID significa Principio de responsabilidad única (SRP).

Responsabilidad significa que en este contexto las razones para cambiar, por lo que el principio establece que una clase solo debe tener una razón para cambiar.

Robert C. Martin lo declaró (durante su conferencia en la escuela de administración de Yale en 10 de septiembre de 2014) de la siguiente manera:

También podría decir, no ponga funciones que cambien por diferentes motivos en la misma clase.

o

No mezcle preocupaciones en sus clases

Razón para aplicar el SRP:

Cuando cambia una clase puede afectar la funcionalidad relacionada con otras responsabilidades de la clase. Mantener las responsabilidades en un nivel bajo minimiza el riesgo de efectos secundarios.

Mal ejemplo

Tenemos una interfaz IWallet y una clase Wallet que implementa IWallet. The Wallet tiene nuestro dinero y la marca, además, debe imprimir nuestro dinero como una representación de cadena. La clase es utilizada por

  1. un servicio web
  2. un escritor de texto que imprime el dinero en euros en un archivo de texto.

Mal ejemplo

El SRP se viola aquí porque tenemos dos preocupaciones:

  1. El almacenamiento del dinero y la marca.
  2. La representación del dinero.

Código de ejemplo 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();
    }
}

Buen ejemplo

Buen ejemplo

Para evitar la violación del SRP, eliminamos el método printMoney de la clase Wallet y lo colocamos en una clase de impresora. La clase de Impresora ahora es responsable de la impresión y la Cartera ahora es responsable del almacenamiento de los valores.

Código de ejemplo 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow