Suche…


Einführung

Was ist SOLID?

SOLID ist eine mnemonische Abkürzung (Gedächtnishilfe). Die Solid-Prinzipien sollten Softwareentwicklern dabei helfen, „Codegerüche“ zu vermeiden, und zu einem guten Quellcode führen. Ein guter Quellcode bedeutet in diesem Zusammenhang, dass der Quellcode leicht zu erweitern und zu pflegen ist. Der Schwerpunkt der Solid-Prinzipien liegt auf Klassen

Was zu erwarten ist:

Warum sollten Sie SOLID anwenden?

Anwendung der fünf SOLID-Prinzipien (Beispiele)

SRP - Grundsatz der Einzelverantwortung

Das S in SOLID steht für Single Responsibility Principle (SRP).

Verantwortung bedeutet in diesem Zusammenhang Gründe für eine Änderung, daher heißt es, dass eine Klasse nur einen Grund für die Änderung haben sollte.

Robert C. Martin hat dies (während seines Vortrags in der Yale-Managementschule am 10. September 2014) wie folgt erklärt

Sie können auch sagen, dass Sie Funktionen, die sich aus verschiedenen Gründen ändern, nicht in derselben Klasse ablegen.

oder

Mischen Sie keine Bedenken in Ihren Klassen

Grund für die Anwendung des SRP:

Wenn Sie eine Klasse ändern, kann dies Auswirkungen auf Funktionen haben, die sich auf andere Verantwortlichkeiten der Klasse beziehen. Wenn Sie die Verantwortlichkeiten auf einem niedrigen Niveau halten, wird das Risiko von Nebenwirkungen minimiert.

Schlechtes Beispiel

Wir haben ein Interface IWallet und eine Wallet-Klasse, die das IWallet implementiert. The Wallet hält unser Geld und die Marke, sollte es unser Geld auch als Zeichenkette darstellen. Die Klasse wird von verwendet

  1. ein Webservice
  2. ein Texter, der das Geld in Euro in eine Textdatei druckt.

Schlechtes Beispiel

Das SRP wird hier verletzt, weil wir zwei Bedenken haben:

  1. Die Einlagerung von Geld und Marke
  2. Die Darstellung des Geldes.

C # -Beispielcode

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

Gutes Beispiel

Gutes Beispiel

Um die Verletzung der SRP zu vermeiden, haben wir die printMoney Methode aus der Wallet-Klasse entfernt und in eine Printer-Klasse printMoney . Die Printer-Klasse ist jetzt für das Drucken zuständig, und das Wallet ist für die Speicherung der Werte verantwortlich.

C # -Beispielcode

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow