Unterschied zwischen dem Prinzip der Einzelverantwortung und der Trennung von Bedenken


Antworten:


39

Single Responsibility Principle (SRP) - Geben Sie jeder Klasse nur einen Grund zur Änderung. und "Grund zur Änderung" == "Verantwortung". Beispiel: Die Rechnungsklasse ist nicht dafür verantwortlich, sich selbst zu drucken.

Trennung von Bedenken (seit 1974). Sorge == Funktion des Systems. Sich um jedes Anliegen kümmern: Für jedes Anliegen sind andere Anliegen irrelevant. Umsetzung des Verhaltens verbergen.

Von hier aus .


Im Prinzip dasselbe, aber SoC allein scheint eine Übertrennung nicht zu verhindern. Eine Übertrennung ist nicht so schlimm wie eine Überkopplung, aber sie ist schlimm, weil sie die Kosten für die Erstellung und Wartung der Software erhöht (dasselbe Problem wie die Überkopplung - verschiedene Gründe). SoC fordert zwei sehr wichtige Erfolgsfaktoren, zumindest pro Onkel Bob (1) "Bedenken" sind zuerst auf Unternehmensebene (nicht Tech); (2) Das Trennen von zusammengehörigen Dingen ist ein Fehler. blog.cleancoder.com/uncle-bob/2014/05/08/…
FastAl

16

Meiner Meinung nach ist das Prinzip der Einzelverantwortung eines der Instrumente / Redewendungen, um eine Trennung der Anliegen zu erreichen.


3
Was? Man könnte leicht eine Anwendung erstellen, die nicht überlappende Funktionen (SRP) hat, die viele Objekte enthält, die nicht voneinander getrennt sind (! SOC).
Andrew Song

6
Es ist jedoch viel schwieriger, ein Objekt abzubilden, das mehrere Verantwortlichkeiten hat und dennoch dem Prinzip der Trennung von Bedenken folgt. Mit anderen Worten, um eine echte Trennung der Anliegen (auf allen Ebenen) zu erreichen, sollte man das Prinzip der
Einzelverantwortung

16

Prinzip der Trennung von Bedenken und Einzelverantwortung (SoC und SRP)

Aus dem verlinkten Artikel:

Separation of Concerns (SoC) - ist der Prozess, bei dem ein Computerprogramm in verschiedene Merkmale unterteilt wird, deren Funktionalität sich so wenig wie möglich überschneidet. Ein Anliegen ist jedes Stück von Interesse oder Fokus in einem Programm. In der Regel sind Bedenken gleichbedeutend mit Funktionen oder Verhaltensweisen. http://en.wikipedia.org/wiki/Separation_of_concerns

Prinzip der Einzelverantwortung (Single Responsibility Principle, SRP) - Jedes Objekt sollte eine Einzelverantwortung haben und alle seine Dienste sollten eng auf diese Verantwortung ausgerichtet sein. In gewisser Weise wird Kohäsion als Synonym für SRP angesehen. http://en.wikipedia.org/wiki/Single_responsibility_principle


4
Auf dieser Ebene wird Kohäsion als Synonym für das Prinzip der Einzelverantwortung angesehen? Ich habe gesucht, dass es viele Kohäsionsstufen gibt (niedrig bis hoch): zusammenfallend, logisch, zeitlich, prozedural und funktional. Bedeutet dies in dieser Erklärung nur "funktionale Kohäsion"?
Limonik

13

Einzelverantwortung besagt, dass ein Objekt für eine einzelne Arbeitseinheit verantwortlich ist.

Die Trennung von Bedenken besagt, dass Anwendungen in Module aufgeteilt werden sollten, deren Funktionen sich so wenig wie möglich überschneiden.

Ähnliche Endergebnisse ... leicht unterschiedliche Anwendungen.


Was ist der Unterschied zwischen dem Objekt und dem Modul? Für mich ist ein Modul eine Klasse und ein Objekt ist eine Klasse oder eine Instanz einer Klasse
Rookian

Ein Modul kann eine ganze ähnliche Funktion in einer Anwendung sein ... bestehend aus der Interaktion zwischen vielen Klassen (jede Klasse hat eine einzige Verantwortung, wenn Sie dem Muster "Einzelverantwortung" folgen).
Justin Niessner

12

Das Prinzip der Einzelverantwortung und die Trennung von Bedenken sind wirklich dasselbe.

Sicher, Sie können sich in einer akademischen Diskussion festsetzen, um einen Unterschied zwischen den beiden herauszufinden, aber warum? In jeder Hinsicht beschreiben sie dasselbe. Das größte Problem ist, dass die Leute so sehr wissen wollen, was ein "Anliegen" und eine "Verantwortung" sind, dass sie vielleicht die wichtige Idee hinter SRP und SoC übersehen.

Diese Idee besteht einfach darin, Ihre Codebasis in lose gekoppelte isolierte Teile aufzuteilen. Auf diese Weise können mehrere Entwickler an verschiedenen Teilen arbeiten, ohne sich gegenseitig zu beeinflussen. Außerdem kann ein einzelner Entwickler ein isoliertes Teil ändern, ohne ein anderes zu beschädigen.

Dies wird auf Modulebene angewendet, z. B. ist MVC ein Architekturmuster, das SRP und SoC fördert. Die Codebasis ist in isolierte Modelle, Ansichten und Controller unterteilt. Auf diese Weise kann die Änderung einer Ansicht unabhängig von einem Modell erfolgen. Zwei zwei sind nicht schrecklich miteinander verflochten.

Auf einer niedrigeren Ebene sollte dies auch auf Klassen angewendet werden. Teilen Sie den Code in mehrere Klassen auf, anstatt Dutzende von Methoden in eine einzelne Klasse einzuteilen. Aus den gleichen Gründen.

Teilen Sie auch auf Methodenebene große Methoden in kleinere Methoden auf.

Allgemein gesagt. SRP ist ein Prinzip, keine Regel, daher muss man es nicht religiös bis zum Äußersten befolgen (sprich: kann / sollte nicht). Es bedeutet nicht, zu weit zu gehen und zum Beispiel nur eine Methode mit sieben Zeilen in jeder Klasse zu haben. Es bedeutet nur ein allgemeines Prinzip, Code in isolierte Teile aufzuteilen. Der Punkt ist, dass dies zu einer besseren Codebasis und einer stabileren Software führen wird.


8

Trennung von Bedenken (SoC). Teilen Sie Ihre Anwendung in verschiedene Funktionen mit möglichst geringer Funktionsüberschneidung ein. (Microsoft).

"Sorge" = "Unterscheidungsmerkmal" = "Unterscheidungsmerkmal"

"Sorge" funktioniert sowohl auf hohem als auch auf niedrigem Niveau

Das Prinzip der Einzelverantwortung  besagt, dass jedes Modul oder jede Klasse die Verantwortung für einen einzelnen Teil der von der Software bereitgestellten Funktionalität tragen sollte und dass die Verantwortung vollständig von der Klasse gekapselt werden sollte. Alle seine Dienstleistungen sollten eng an dieser Verantwortung ausgerichtet sein. (Wikipedia-Definition)

"Verantwortung" = "Grund zur Veränderung" was ändern? "Ein einzelner Teil der von der Software bereitgestellten Funktionalität" = Basiseinheit

Fazit

  • Das Prinzip der Einzelverantwortung funktioniert auf Basiseinheiten -> funktioniert auf niedriger Ebene

  • Die Trennung von Bedenken funktioniert sowohl auf hoher als auch auf niedriger Ebene

  • SRP und SoC arbeiten bei der Trennung von Bedenken zusammen. Sie sind
    auf niedrigem Niveau genau gleich


SRP funktioniert auch auf verschiedenen Ebenen. Sie haben eine allgemeinere Verantwortung auf Bibliotheksebene, die auf Klassenebene und eine spezifischere auf Funktionsebene.
Phil1970

7

Da in keiner der vorherigen Antworten Robert Martin zitiert wird, der das Prinzip der Einzelverantwortung geschaffen hat , denke ich, dass hier eine maßgeblichere Antwort erforderlich ist.

Martins Inspiration für die SRP wurde von David Parnas, Edsger Dijkstra (der den Begriff Trennung von Bedenken geprägt hat ) und Larry Constantine (der die Begriffe Kopplung und Zusammenhalt geprägt hat ) gewonnen. Martin konsolidierte ihre Ideen in der SRP.

Ein weiterer Wortlaut für das Prinzip der Einzelverantwortung lautet:

Sammeln Sie die Dinge, die sich aus den gleichen Gründen ändern. Trennen Sie die Dinge, die sich aus verschiedenen Gründen ändern.

Wenn Sie darüber nachdenken, werden Sie feststellen, dass dies nur eine andere Möglichkeit ist, Kohäsion und Kopplung zu definieren. Wir wollen den Zusammenhalt zwischen Dingen erhöhen, die sich aus den gleichen Gründen ändern, und wir wollen die Kopplung zwischen den Dingen verringern, die sich aus verschiedenen Gründen ändern.

Denken Sie jedoch beim Nachdenken über dieses Prinzip daran, dass die Gründe für Veränderungen Menschen sind . Es sind Menschen, die Änderungen anfordern. Und Sie möchten diese oder sich selbst nicht verwirren, indem Sie den Code mischen, den viele verschiedene Menschen aus verschiedenen Gründen interessieren.

Bei der ursprünglichen Frage besteht der geringfügige Unterschied zwischen SRP und SoC darin, dass Martin den Begriff Bedenken dahingehend verfeinert hat, dass er sich auf Personen bezieht .


3

Die Trennung von Bedenken ist ein Prozess; Das Prinzip der Einzelverantwortung ist eine Design- / Architekturphilosophie. Sie sind nicht völlig unzusammenhängend, dienen aber unterschiedlichen Zwecken.


2

Ähnlich, aber: SoC hängt mit Bedenken zusammen: Um ein komplexes Problem in mehrere Bedenken aufzuteilen, muss SRP nur eine Verantwortung tragen.


2

SRP und SOC arbeiten auf unterschiedlichen Abstraktionsebenen. In beiden Fällen soll die Kopplung verringert und der Zusammenhalt gestärkt werden. Während SRP eher auf Objektebene arbeitet, kann SOC auch auf der Implementierung der Funktionsebene arbeiten. Eine Funktion kann von einem Objekt, aber auch von mehreren Objekten implementiert werden. Daher können sich die Kopplung und der Zusammenhalt beider Prinzipien unterscheiden.


2

Ich habe versucht, einen Vergleich zwischen der Trennung von Bedenken (SoC) und dem Prinzip der Einzelverantwortung (SRP) zu ziehen.

Unterschiede

  • Das SRP befindet sich auf Klassenebene, aber SoC befindet sich in jedem Computerprogramm, jeder Abstraktion ... oder manchmal auf Architekturebene.

  • Bei der SRP geht es um die Qualität (wie nicht was) der Aufteilung Ihrer Domain in zusammenhängende Klassen, die nur eine Verantwortung haben (ein Grund zur Änderung). Auf der anderen Seite ist SoC ein Entwurfsprinzip zum Aufteilen eines Kontexts in verschiedene Abschnitte, sodass jeder Abschnitt ein separates Problem (was nicht wie) behandelt, da es viele Tools gibt (z. B. Klassen, Funktionen, Module, Pakete ,. ..) um dieses Ziel auf verschiedenen Ebenen zu erreichen.

  • Das Konzept von SRP basiert auf der Kohäsion (hohe Kohäsion), während SoC in jeder Abstraktionsebene nahe an Molekularität, Teilung und Eroberung (D & C) liegt.

  • SoC ist ein gutes Entwurfsprinzip, um Komplexität wie Abstraktion zu bewältigen. Um einzelne verantwortliche Klassen zu erreichen, können Sie das SoC-Prinzip als großartige Lösung verwenden. Eine Möglichkeit zu erkennen, dass eine Klasse mehr als eine Verantwortung hat, besteht darin, dieser Klasse eine andere Verantwortung (Anliegen) zu entziehen.

Ähnlichkeiten

  • Nachdem Sie jedes dieser Prinzipien angewendet haben, wird Ihr Kontext wiederverwendbarer, wartbarer, robuster, lesbarer, ....

0

Antworten:

Separation of Concerns (SoC) ist ein vielseitigerer Begriff - er kann auf Systemebene oder auf niedrigeren Ebenen wie Klassen (oder sogar den Methoden innerhalb einer Klasse) angewendet werden.

Das Single Responsibility Principle (SRP) wird verwendet, um SoC auf den unteren Ebenen zu diskutieren, z. B. in einer Klasse


Möglichkeiten, darüber nachzudenken:

  1. Auf niedriger Ebene sind SoC und SRP synonym. Man könnte also sagen, dass SRP ein redundanter Begriff ist - oder dass SoC nur zur Erörterung der Systemebene verwendet werden sollte

  2. In Anbetracht von (1) ist der Begriff SoC etwas mehrdeutig. Sie benötigen einen Kontext, um zu wissen, ob es sich bei der Diskussion um SoC auf hoher oder niedriger Ebene handelt

  3. Um sich daran zu erinnern, dass SRP der Begriff nur für niedrigere Ebenen ist, denken Sie daran: In der Alltagssprache ist eine "Verantwortung" normalerweise eine genau definierte Sache, die an einen bestimmten Code gebunden werden kann, während "Bedenken" normalerweise vage sind und möglicherweise vage sind umfassen eine Reihe verwandter Dinge, weshalb SoC möglicherweise natürlicher für die Erörterung der Systemebene geeignet ist als SRP

  4. SoC ist in gewissem Sinne eine stärkere Anforderung / ein stärkeres Prinzip als SRP, da es auf Systemebene gilt. Um auf Systemebene wirklich erreicht zu werden, muss es auch bei der Entwicklung der Systemkomponenten verwendet werden. Das heißt, ein hohes SoC-Niveau impliziert ein anständiges SoC / SRP auf den niedrigeren Niveaus - aber das Gegenteil ist nicht der Fall, das heißt, ein niedrigeres SoC / SRP-Niveau impliziert kein SoC oder überhaupt nichts für das nächsthöhere Niveau, egal umfassendes System. Ein Beispiel für SoC / SRP, das auf Methodenebene erreicht, aber dann auf Klassenebene verletzt wird, finden Sie in diesem Blogbeitrag von Artur Trosin .


0

Trennung von Bedenken

Das SOC-Prinzip (Separation of Concerns) besagt, dass ein Code-Artefakt es einem ermöglichen sollte, seine Aufmerksamkeit auf einen bestimmten Aspekt zu lenken. Ein Code-Artefakt kann alles sein, von einer bestimmten Funktion bis zu einer Klasse, einem ganzen Paket oder sogar einer ganzen Anwendung. Das SOC-Prinzip kann auf jede Architekturebene in den eigenen Anwendungen angewendet werden. Ein Beispiel für eine Architektur, bei der SOC angewendet wird, ist eine Schichtarchitektur.

Prinzip der Einzelverantwortung

Das Single Responsibility Principle (SRP) besagt, dass "ein Modul einen und nur einen Grund zur Änderung haben sollte" (Clean Architecture, Martin, S. 62). Die SRP gilt für die Modulebene, und bei der Anwendung der SRP sollte der Grund für die Änderung berücksichtigt werden.

Fazit

Das SOC-Prinzip besagt, dass ein Code-Artefakt es einem ermöglichen sollte, seine Aufmerksamkeit auf einen bestimmten Aspekt zu lenken. Das SRP konkretisiert dies, indem es feststellt, dass wir auf Modulebene unsere Aufmerksamkeit auf den Grund der Änderung richten sollten. Somit ist die SRP ein SOC.

PS Der Vollständigkeit halber: das Common Closure Principle

Das Common Closure Principle (CCP) ist eine Neuformulierung des SRP auf einer noch höheren Ebene, der Komponentenebene. Die KPCh legt fest, dass Klassen, die sich aus denselben Gründen und zu denselben Zeiten ändern, in denselben Komponenten zusammengefasst werden sollten (Clean Architecture, S. 105). Die KPCh ist ein weiteres Beispiel für einen SOC.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.