Zoeken…


Invoering

Wat is SOLID?

SOLID is een ezelsbruggetje (geheugensteun). De Solid-principes moeten softwareontwikkelaars helpen om "codegeuren" te voorkomen en moeten leiden tot een goede broncode. Goede broncode betekent in deze context dat de broncode eenvoudig kan worden uitgebreid en onderhouden. De belangrijkste focus van de Solid-principes zijn klassen

Wat te verwachten:

Waarom u SOLID zou moeten toepassen

Hoe de vijf SOLID-principes toe te passen (voorbeelden)

SRP - Single Responsibility Principle

De S in SOLID staat voor Single Responsibility Principe (SRP).

Verantwoordelijkheid betekent in dit verband redenen om te veranderen, dus het principe stelt dat een klasse slechts één reden moet hebben om te veranderen.

Robert C. Martin verklaarde het (tijdens zijn lezing op Yale Shool of Management op 10 september 2014) als volgt

Je zou ook kunnen zeggen: zet functies die om verschillende redenen veranderen niet in dezelfde klasse.

of

Combineer geen zorgen in je lessen

Reden om de SRP toe te passen:

Wanneer u een klas verandert, kan dit van invloed zijn op de functionaliteit met betrekking tot andere verantwoordelijkheden van de klas. Door de verantwoordelijkheden op een laag niveau te houden, wordt het risico op bijwerkingen geminimaliseerd.

Slecht voorbeeld

We hebben een interface IWallet en een Wallet-klasse die de IWallet implementeert. De Wallet bevat ons geld en het merk, bovendien moet het ons geld afdrukken als stringvoorstelling. De klasse wordt gebruikt door

  1. een webservice
  2. een tekstschrijver die het geld in euro's in een tekstbestand afdrukt.

Slecht voorbeeld

De SRP is hier geschonden omdat we ons twee zorgen maken:

  1. Het opslaan van het geld en het merk
  2. De vertegenwoordiging van het geld.

C # voorbeeldcode

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

Goed voorbeeld

Goed voorbeeld

Om schending van de SRP te voorkomen, hebben we de methode printMoney uit de Wallet-klasse verwijderd en in een Printer-klasse geplaatst. De klasse Printer is nu verantwoordelijk voor het afdrukken en de Wallet is nu verantwoordelijk voor het opslaan van de waarden.

C # voorbeeldcode

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow