Wenn Sie SOLID folgen, sind das Lesen und Schreiben von Dateien zwei separate Aufgaben?

13

Ich fange gerade an, SOLID zu erkunden, und bin mir nicht sicher, ob das Lesen von Dateien und das Schreiben in Dateien die gleiche Verantwortung haben.

Das Ziel ist derselbe Dateityp. Ich möchte PDFs in meiner Anwendung lesen und schreiben.

Die Anwendung ist in Python, wenn das einen Unterschied macht.

Drachen
quelle

Antworten:

24

Die Lese- und Schreibimplementierung weist wahrscheinlich eine hohe Wahrscheinlichkeit auf, sehr kohäsiv zu sein. Wenn sich eines ändern würde, würde sich das andere ändern. Ein hoher Zusammenhalt ist ein starkes Indiz für eine Einzelverantwortung, und das Prinzip der Einzelverantwortung besagt, dass sie in derselben Klasse zusammengefasst werden sollten. Wenn diese Operationen eine geringe Kohäsion aufweisen, besteht die Möglichkeit, dass durch Aufteilen die Wartbarkeit verbessert wird.

Wenn es jedoch Konsumenten gibt, die Daten nur lesen, ohne zu schreiben, oder nur schreiben, ohne zu lesen, ist dies ein Hinweis darauf, dass Sie diese Operationen aus Sicht der Schnittstelle gemäß dem Prinzip der Schnittstellentrennung trennen sollten. Dies bedeutet, dass die Konsumenten zwei Schnittstellen definieren sollten, auf die sie sich verlassen können, während die FileKlasse beide Schnittstellen implementiert.

Steven
quelle
8

Wenn Sie beim Entwerfen eines Objekts das SOLID-Prinzip anwenden, können Sie das Lesen und Schreiben von Dateien als EINE Verantwortung betrachten - arbeiten Sie mit persistenten Daten

Sie sollten das Lesen und Schreiben von Dateien jedoch nicht auf dieselbe Methode oder Funktion anwenden.

SergeyLebedev
quelle
5

Die meisten anderen Antworten scheinen übersehen zu haben, dass in Ihrer Frage eine wichtige Information fehlt - Sie haben uns nicht mitgeteilt, ob und wie die Dokumente, die Sie lesen und schreiben möchten, zusammenhängen!

Hat Ihre Anwendung so etwas wie ein "Dokumentobjekt" und schreibt dieses zuerst in eine PDF-Datei und liest später dieselbe Datei erneut in ein ähnliches Dokumentobjekt? Oder umgekehrt, es liest PDFs in ein Dokument ein, nimmt einige Änderungen daran vor und speichert dasselbe Dokument erneut in einem neuen PDF? Dann sollte Lesen und Schreiben als eine Verantwortung gesehen werden. Dies kann der Fall sein, wenn Ihre Anwendung eine "PDF-Editor" -Komponente oder ein "PDF-Manipulations-Toolkit" ist oder enthält.

Wenn jedoch ein Teil Ihrer Anwendung einige PDF-Dateien erstellt, z. B. in einer Berichterstellungskomponente, und ein anderer nicht verwandter Teil Ihrer Anwendung andere PDF-Dateien liest (z. B. einen E-Mail-Anlageauswerter für eine Suchmaschine) und die interne Darstellung von Diese letzteren PDFs haben nichts mit dem ersten Anwendungsfall zu tun, da diese Aufgaben unterschiedliche Verantwortlichkeiten haben.

Speziell für PDF ist dieser zweite Anwendungsfall der Fall, den ich in verschiedenen Arten von Anwendungen viel häufiger gesehen habe. Es gibt viel mehr Bibliotheken / Komponenten, die nur die PDF-Erstellung unterstützen, und nur eine viel kleinere Anzahl, die auch das PDF-Lesen unterstützen. Wenn Sie zum Generieren der PDF-Dateien eine einzige Bibliothek und zum Lesen der PDF-Dateien eine völlig andere Bibliothek verwenden, sollte klar sein, dass das Lesen und Schreiben von PDF-Dateien getrennte Aufgaben haben.

Doc Brown
quelle
Dies ähnelt der Antwort von Steven, bietet jedoch ein konkretes Beispiel.
DavidS
@DavidS: Stevens Antwort ist nur eine sehr abstrakte, aber da das OP speziell nach PDF-Dateien gefragt hat, halte ich es für sinnvoll, diese Frage konkreter zu beantworten. Und für PDF widerspreche ich dem allerersten Satz von Steven: "Lese- und Schreibimplementierung haben eine hohe Wahrscheinlichkeit, sehr zusammenhängend zu sein" - meiner Erfahrung nach ist für typische PDF-Anwendungsfälle das Gegenteil der Fall (ich habe ihn auch positiv bewertet).
Doc Brown
Konkrete Beispiele sind hervorragend. Ich habe es nur zur Analyse verglichen. Gute Antwort!
DavidS
3

Laut ( Robert C. Martin ) ist eine Verantwortung eine Reihe von Funktionen, die einem bestimmten Schauspieler dienen.

Ein Akteur sollte die einzige Änderungsquelle für eine bestimmte Verantwortung sein (es sollte nur einen Grund für eine Änderung geben).

In Ihrem Fall sollten Sie zuerst die Akteure als ersten Schritt definieren und dann die Fragen stellen:. Gibt es Schauspieler, die sich nur für das Lesen von Dateien und andere für das Schreiben interessieren?

In diesem Fall sind das Lesen und Schreiben von Dateien zwei getrennte Aufgaben. Da es mehrere Änderungsquellen gibt (viele Akteure möchten möglicherweise die Leselogik und das Gleiche zum Schreiben ändern).

youness
quelle