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.