Ricerca…


introduzione

Cos'è SOLIDO?

SOLID è un acronimo mnemonico (memory aid). I principi di Solid dovrebbero aiutare gli sviluppatori di software ad evitare "odori di codice" e dovrebbero portare a buoni codici sorgente. Un buon codice sorgente significa in questo contesto che il codice sorgente è facile da estendere e mantenere. L'obiettivo principale dei principi Solidi sono le classi

Cosa aspettarsi:

Perché dovresti applicare SOLID

Come applicare i cinque principi SOLID (esempi)

SRP - Principio della singola responsabilità

La S in SOLID sta per Principio di Responsabilità Singola (SRP).

Responsabilità significa in questo contesto ragioni per cambiare, quindi il principio afferma che una classe dovrebbe avere solo una ragione per cambiare.

Robert C. Martin lo ha affermato (durante la sua conferenza allo Yale shool of management in 10 set 2014) come segue

Potresti anche dire, non inserire funzioni che cambiano per motivi diversi nella stessa classe.

o

Non mescolare le preoccupazioni nei tuoi corsi

Motivo per applicare l'SRP:

Quando si modifica una classe, si potrebbe influire sulla funzionalità correlata ad altre responsabilità della classe. Mantenere le responsabilità a un livello basso riduce al minimo il rischio di effetti collaterali.

Cattivo esempio

Abbiamo un'interfaccia IWallet e una classe Wallet che implementa l'IWallet. Il Portafoglio tiene i nostri soldi e il marchio, inoltre deve stampare i nostri soldi come rappresentazione delle stringhe. La classe è usata da

  1. un servizio web
  2. un autore di testi che stampa i soldi in euro in un file di testo.

Cattivo esempio

L'SRP è qui violato perché abbiamo due preoccupazioni:

  1. La memorizzazione dei soldi e del marchio
  2. La rappresentazione del denaro.

Codice di esempio 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();
    }
}

Buon esempio

Buon esempio

Per evitare la violazione printMoney , abbiamo rimosso il metodo printMoney dalla classe Wallet e lo abbiamo inserito in una classe Printer. La classe Printer è ora responsabile della stampa e Wallet è ora responsabile della memorizzazione dei valori.

Codice di esempio 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow