Sök…


Introduktion

Vad är SOLID?

SOLID är en mnemonisk (minnehjälp) akronym. De solida principerna bör hjälpa mjukvaruutvecklare att undvika "kodlukt" och bör leda till god källkod. Bra sourcecode betyder i detta sammanhang att sourcecoden är lätt att utöka och underhålla. Huvudfokus för de solida principerna är klasser

Vad du kan förvänta:

Varför du bör använda SOLID

Hur man använder de fem SOLID-principerna (exempel)

SRP - Enskilt ansvarsprincip

S in SOLID står för Single ansvar-principen (SRP).

Ansvar innebär i detta sammanhang skäl att förändras, så principen säger att en klass endast ska ha en anledning att ändra.

Robert C. Martin uttalade det (under sin föreläsning på Yale shool of management 10 september 2014) enligt följande

Du kan också säga, placera inte funktioner som ändras av olika skäl i samma klass.

eller

Blanda inte problem i dina klasser

Anledning att tillämpa SRP:

När du ändrar en klass kan du påverka funktionalitet relaterad till klassen. Att hålla ansvaret på en låg nivå minimerar risken för biverkningar.

Dåligt exempel

Vi har ett gränssnitt IWallet och en Wallet-klass som implementerar IWallet. Plånboken har våra pengar och varumärket, dessutom bör den skriva ut våra pengar som strängrepresentation. Klassen används av

  1. en webbtjänst
  2. en textförfattare som skriver ut pengarna i euro till en textfil.

Dåligt exempel

SRP är här kränkt eftersom vi har två problem:

  1. Lagring av pengar och varumärke
  2. Representationen av pengarna.

C # exempelkod

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

Bra exempel

Bra exempel

För att undvika överträdelsen av SRP, tog vi bort metoden printMoney från klassen Plånbok och placerade den i en skrivarklass. Skrivarklassen ansvarar nu för utskriften och plånboken ansvarar nu för att lagra värdena.

C # exempelkod

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow