In der Welt der Softwareentwicklung sagen uns die SOLID-Prinzipien, wie wir Funktionen und Daten so organisieren, dass unsere Codes:
Der Begriff SOLID ist ein Akronym für fünf Designpostulate, die im Folgenden beschrieben werden:
(S) Prinzip der Einzelverantwortung: „Ein Modul muss einen und nur einen Grund zur Änderung haben“
(Das) Offen/Geschlossen-Prinzip: „Ein Software-Artefakt muss zur Erweiterung offen, aber zur Änderung geschlossen sein“
(L) Liskov-Substitutionsprinzip: „Eine abgeleitete Klasse muss durch ihre Basisklasse ersetzbar sein“
(I) Prinzip der Schnittstellentrennung: „Eine Klasse sollte nicht gezwungen werden, Schnittstellen und Methoden zu implementieren, die sie nicht verwenden wird“
(D) Abhängigkeitsinversionsprinzip: „Abhängig von Abstraktionen und nicht von Implementierungen“
SOLID ist für die objektorientierte Programmierung konzipiert und es ist bekannt, dass GoLang keine Sprache ist, die dieses Paradigma übernimmt. Wir können jedoch die bereitgestellten Ressourcen nutzen, um die OOP-Methodik zu erfüllen. Go bietet beispielsweise keine Vererbungsunterstützung, aber die Idee kann durch die Kompositionsunterstützung kompensiert werden. Ebenso kann eine Art Polymorphismus mithilfe von Schnittstellen erstellt werden.
In diesem Artikel, dem ersten einer Reihe von 5, möchte ich das erste Prinzip anhand von Beispielen näher erläutern, die Situationen ähneln, denen wir täglich begegnen.
Wir wissen bereits, was der Begriff bedeutet, jetzt ist es an der Zeit zu lernen, wie man ihn in GoLang implementiert.
In dieser Sprache könnten wir dieses Prinzip als „Eine Funktion oder ein Typ darf nur eine Aufgabe und nur eine Verantwortung haben“ definieren. Sehen wir uns den folgenden Code an:
Oben haben wir eine Struktur, die wir userService nennen. Es verfügt über zwei Eigenschaften: db, das für die Kommunikation mit einer relationalen Datenbank verantwortlich ist, und amqpChannel
, das die Kommunikation mit dem RabbitMQ-Nachrichtendienst ermöglicht.
UserService implementiert eine Methode namens Create. Bei dieser Methode speichern wir die empfangenen Benutzerinformationen in der Datenbank und veröffentlichen die Daten dann in RabbitMQ.
Dies kann zu mehreren Problemen führen, wie zum Beispiel:
Im folgenden Code haben wir die Struktur geändert, um die SRP zu berücksichtigen. Schauen Sie es sich an:
Beachten Sie, dass wir die Verantwortlichkeiten in drei verschiedene Teile unterteilt haben: das Repository UserRepository, um den Benutzer in der Datenbank beizubehalten, den Herausgeber UserPublisher, um eine Nachricht an RabbitMQ zu senden, und das Dienst UserService, der diese beiden Vorgänge orchestriert.
Auf diese Weise ist jede Komponente für eine spezifische und unabhängige Aufgabe verantwortlich, was die Wartung und Weiterentwicklung des Codes erleichtert und darüber hinaus ermöglicht, dass jeder dieser Teile ersetzt oder verbessert wird, ohne die anderen zu beeinträchtigen. Sollte es beispielsweise notwendig sein, die verwendete Datenbank zu ändern, tauschen Sie einfach das Repository aus. Sollte eine Änderung der Kommunikationsform erforderlich sein, wechseln Sie einfach den Herausgeber.
Es ist erwähnenswert, dass es einen subtilen Unterschied zwischen der Ausführung zweier unterschiedlicher Aufgaben und der Delegierung ihrer Ausführung gibt. Im ursprünglichen userService.Create-Beispiel wurden zwei Vorgänge an einem Ort ausgeführt, was gegen das Prinzip der Einzelverantwortung verstößt. Nach dem Refactoring haben wir Ausführungen an verschiedene Strukturen delegiert und die Create-Methode war nur für die Koordinierung dieses Ablaufs verantwortlich.
Um SRP in diesem Beispiel anzuwenden, haben wir letztendlich auch einige der anderen SOLID-Prinzipien implementiert:
In den nächsten Artikeln dieser Reihe werde ich jeden einzelnen ausführlicher erklären, mit konkreten Beispielen.
Bis später, Leute!
Referenzen:
SOLID: Die ersten 5 Prinzipien des objektorientierten Designs
Clean Coder Blog – Das Single-Responsibility-Prinzip
Das obige ist der detaillierte Inhalt vonPrinzipien von SOLID in GoLang – Single Responsability Principle (SRP). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!