Ist das Prinzip der Einzelverantwortung eine Regel von OOP?[geschlossen]

StackOverflow https://stackoverflow.com/questions/15412

  •  08-06-2019
  •  | 
  •  

Frage

Ein Antwort Auf eine Frage zum Stapelüberlauf wurde angegeben, dass ein bestimmtes Framework gegen eine einfache OOP-Regel verstoßen hat:Prinzip der Einzelverantwortung (SRP).

Ist das Prinzip der Einzelverantwortung Wirklich eine OOP-Regel?

Mein Verständnis der Definition von objektorientierter Programmierung ist „ein Paradigma, bei dem Objekte und ihr Verhalten zur Erstellung von Software verwendet werden“.Dazu gehören folgende Techniken:Kapselung, Polymorphismus und Vererbung.

Verstehen Sie mich jetzt nicht falsch – ich glaube, dass SRP der Schlüssel zu den meisten guten OO-Designs ist, aber ich habe das Gefühl, dass es Fälle gibt, in denen dieses Prinzip gebrochen werden kann und sollte (genau wie die Regeln zur Datenbanknormalisierung).Ich treibe die Vorteile von SRP aggressiv voran und der Großteil meines Codes folgt diesem Prinzip.

Aber ist es eine Regel und impliziert daher, dass sie nicht gebrochen werden sollte?

War es hilfreich?

Lösung

Wenn überhaupt, gibt es in der Softwareentwicklung nur sehr wenige Regeln, die ausnahmslos sind.Manche Leute denken, dass es keinen Platz dafür gibt gehe zu aber sie liegen falsch.

Was OOP betrifft, gibt es keine einheitliche Definition von Objektorientierung. Je nachdem, wen Sie fragen, erhalten Sie unterschiedliche harte und weiche Prinzipien, Muster und Praktiken.

Die klassische Idee von OOP besteht darin, dass Nachrichten an ansonsten undurchsichtige Objekte gesendet werden und die Objekte die Nachricht mit Kenntnis ihres eigenen Inneren interpretieren und dann eine Funktion ausführen.

SRP ist ein Software-Engineering-Prinzip, das auf die Rolle einer Klasse, einer Funktion oder eines Moduls angewendet werden kann.Es trägt zum Zusammenhalt von etwas bei, so dass es sich in seiner Gesamtheit gut verhält, ohne dass unzusammenhängende Teile davon hängen oder mehrere Rollen haben, die die Dinge miteinander verflechten und komplizieren.

Selbst mit nur einer Verantwortung kann diese von einer einzelnen Funktion bis hin zu einer Gruppe lose zusammenhängender Funktionen reichen, die Teil eines gemeinsamen Themas sind.Solange Sie es vermeiden, ein Element zu manipulieren, um die Verantwortung für etwas zu übernehmen, für das es nicht in erster Linie entwickelt wurde, oder andere Ad-hoc-Aktionen durchzuführen, die die Einfachheit eines Objekts verwässern, verstoßen Sie gegen das von Ihnen gewünschte Prinzip.

Aber ich finde, dass es einfacher ist, SRP richtig zu machen, als etwas Aufwändigeres zu tun, das genauso robust ist.

Andere Tipps

Keine dieser Regeln sind Gesetze.Es handelt sich eher um Richtlinien und Best Practices.Es gibt Zeiten, in denen es keinen Sinn macht, „die Regeln“ zu befolgen und Sie das tun müssen, was für Ihre Situation am besten ist.

Haben Sie keine Angst davor, das zu tun, was Sie für richtig halten.Möglicherweise kommen Sie tatsächlich auf neuere und bessere Regeln.

Um Kapitän Barbossa zu zitieren:

„...Und zweitens müssen Sie ein Pirat sein, damit der Piratenkodex gilt, und das sind Sie nicht.“Und drittens handelt es sich bei dem Code eher um „Richtlinien“ als um tatsächliche Regeln …“

Um Jack Sparrow & Gibbs zu zitieren.»Ich dachte, du solltest dich an den Kodex halten.« Hr.Gibbs:„Wir dachten, es handele sich um tatsächlichere Richtlinien."

Offensichtlich verstehen die Piraten das ziemlich gut.

Die „Regeln“ könnten über die Musterbewegung als „Kräfte“ verstanden werden

Es gibt also eine Kraft, die versucht, der Klasse eine einheitliche Verantwortung aufzuerlegen.(Zusammenhalt)

Aber es gibt auch eine Kraft, die versucht, die Kopplung an andere Klassen gering zu halten.

Wie bei jedem Design (nicht nur bei Code) lautet die Antwort: Es kommt darauf an.

Ahh, ich denke, das bezieht sich auf eine Antwort, die ich gegeben habe.:) :)

Wie bei den meisten Regeln und Gesetzen gibt es zugrunde liegende Motive, aufgrund derer diese Regeln relevant sind. Wenn das zugrunde liegende Motiv nicht vorhanden oder auf Ihren Fall nicht anwendbar ist, steht es Ihnen frei, die Regeln entsprechend Ihren eigenen Bedürfnissen zu ändern/zu brechen.

Allerdings handelt es sich bei SRP nicht um eine OOP-Regel an sich, sondern um bewährte Methoden zur Erstellung von OOP-Anwendungen, die sowohl leicht erweiterbar als auch einheitlich testbar sind.

Beides sind Eigenschaften, die meiner Meinung nach bei der Entwicklung von Unternehmensanwendungen von größter Bedeutung sind, da die Wartung bestehender Anwendungen mehr Zeit in Anspruch nimmt als die Neuentwicklung.

Wie viele der anderen Poster gesagt haben, sind alle Regeln dazu da, gebrochen zu werden.
Abgesehen davon denke ich, dass SRP eine der wichtigeren Regeln für das Schreiben von gutem Code ist.Es ist nicht spezifisch für die objektorientierte Programmierung, aber der „Kapselungs“-Teil von OOP ist sehr schwer richtig zu machen, wenn die Klasse keine einzige Verantwortung hat.

Denn wie kapselt man eine Klasse mit mehreren Verantwortlichkeiten richtig und einfach?Normalerweise lautet die Antwort: Mehrere Schnittstellen und in vielen Sprachen können ziemlich hilfreich sein, aber es ist für die Benutzer Ihrer Klasse immer noch verwirrend, dass es in verschiedenen Situationen auf völlig unterschiedliche Weise angewendet werden kann.

SRP ist nur ein anderer Ausdruck von ISP :-).

Und das „P“ bedeutet „Prinzip“, nicht „Regel“ :D

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top