Unterschied zwischen einer einzigen Wahrheitsquelle und einem einzigen Verantwortungsprinzip?

9

Also habe ich gerade beim Anschauen von Videoserien über Programmiercode-Interviews etwas über den Begriff der einzigen Quelle der Wahrheit herausgefunden .

Soweit ich verstanden habe, bedeutete dies, dass die einzige Quelle der Wahrheit eine Kapselung jeder Art von Operation / Logik ist, die mehrfach verwendet werden kann.

Es erinnerte mich sehr stark an die SRP, die in gewissem Sinne ziemlich gleich ist, da sie bestimmte Operationen und / oder Logik enthält, die möglicherweise mehrmals verwendet werden.

Gibt es etwas sehr Feines, das mir hier fehlt?

Vielen Dank für Ihre Zeit.

AvetisG
quelle

Antworten:

12

Das sind zwei verschiedene Prinzipien. Das einzige, was sie gemeinsam haben, ist das Wort "Single".

Eine einzige Quelle der Wahrheit ist das Endergebnis des Normalisierungsprozesses einer Datenbank. Jede Entitätsinformation wird einmal und nur einmal gespeichert.

Single Source of Truth erklärt, warum wir Kunden in eine Tabelle und Produkte in eine andere Tabelle einfügen. Durch die Zuordnung von Kunden zu Produkten mithilfe einer CustomerProducts-Tabelle vermeiden wir das Speichern von Kunden oder Produkten an zwei verschiedenen Orten und setzen stattdessen Zeiger in die CustomerProducts-Tabelle, die auf jeden Kunden und jedes Produkt verweisen. Auf diese Weise können wir auch mehrere Kunden mit einem Produkt und mehrere Produkte mit einem Kunden verknüpfen, ohne Informationen wie den Produktnamen oder den Preis zu duplizieren.

Eine einzige Quelle der Wahrheit (jedes Datum wird nur an einem Ort gespeichert) bedeutet, dass das gesamte System dieselbe Änderung zum gleichen Zeitpunkt sieht, wenn Sie dieses Datum ändern. Vergleichen Sie dies mit mehreren Wahrheitsquellen, bei denen Sie das Datum an allen Stellen ändern müssen, an denen es gespeichert ist. Verschiedene Teile des Systems sehen möglicherweise zumindest vorübergehend zwei unterschiedliche Werte für dasselbe Datum.

Single Responsibility Principle (SRP) bedeutet, dass eine Klasse nur eine Verantwortung oder einen Grund zur Änderung haben sollte. Das Beispiel, das Fowler gibt, ist das einer Modemklasse:

interface Modem
{
    public void dial(String phoneNumber);
    public void hangup();
    public void send(char c);
    public char recv();
}

Diese Klasse verstößt gegen SRP, da sie zwei Hauptaufgaben hat: Herstellen einer Verbindung und Senden von Daten. Um das Problem zu beheben, teilen Sie die Schnittstelle in zwei verschiedene Schnittstellen auf: eine Verbindungsschnittstelle und eine Kommunikationsschnittstelle. Die erste Schnittstelle würde die Wähl- und Auflegemethoden enthalten, und die zweite Schnittstelle würde die Sende- und Empfangsmethoden enthalten.

SRP ist kein Gesetz, sondern nur ein Prinzip. Manchmal wird SRP aus praktischen Gründen oder aus anderen Gründen verletzt. Gleiches gilt für die Datenbanknormalisierung. Manchmal werden Daten aus Leistungsgründen oder aus anderen Gründen in einer denormalisierten Form (einschließlich einiger Duplikate) gespeichert.

Persistenz Ignoranz ist eine andere Form von SRP: Eine Klasse sollte keine Kenntnisse darüber haben, wie sie sich in einem Datenspeicher speichern kann. Das ist nicht seine Verantwortung; Es liegt in der Verantwortung einer anderen Klasse. Wäre dies nicht der Fall, müssten Sie jede Klasse ändern, die den Datenspeicher verwendet, wenn Sie den Datenspeicher in einen anderen Datenspeichertyp ändern möchten.

Robert Harvey
quelle
7

Ähm nein? Sie scheinen ziemlich bedeutende Unterscheidungen zu vermissen !

Das Prinzip der Einzelverantwortung enthält nichts. Es dupliziert keine Verhaltensweisen / Codes / Logik. Es heißt nur, dass eine Klasse eines tun sollte. Sie können immer noch zwei Klassen haben, die dasselbe tun. Das Prinzip ist damit völlig in Ordnung.

Die einzige Quelle der Wahrheit kapselt nichts. Es ist eine Richtlinie, die Ihnen hilft, Ihr Design zu klären. Sehr oft haben Sie zwei oder mehr Versionen derselben Daten. Eine in einer Datenbank, eine in einem Cache, eine im Speicher, eine auf der Clientseite, eine in SQLite, die irgendwo auf einem PC sitzt ... Eine einzige Quelle der Wahrheit ist etwas, das Sie bestimmen. Sie sagen, dass einer derjenige ist, der gewinnt, wenn Ihre Quellen nicht übereinstimmen. Diese Version ist die Wahrheit.

Kurz gesagt, diese haben entschieden nichts miteinander zu tun.

Telastyn
quelle