Sono due principi diversi. Praticamente l'unica cosa che hanno in comune è la parola "single".
Single Source of Truth è il risultato finale del processo di normalizzare un database. Ogni informazione sull'entità viene memorizzata una volta sola e solo una volta.
L'unica fonte di verità spiega perché mettiamo i clienti in una tabella e i prodotti in un'altra. Associando i clienti ai prodotti, utilizzando una tabella CustomerProducts, evitiamo di archiviare clienti o prodotti in due luoghi diversi e inseriamo invece dei puntatori nella tabella CustomerProducts che puntano a ciascun cliente e prodotto. Questo ci consente anche di associare più clienti a un prodotto e più prodotti a un cliente, senza duplicare informazioni come il nome del prodotto o il suo prezzo.
Avere un'unica Sorgente di Verità (ogni dato è memorizzato in una sola posizione) significa che, quando si modifica quel dato, l'intero sistema vede la stessa modifica nello stesso istante. Contrasto a quello con più fonti di verità, in cui è necessario modificare il dato in tutti i luoghi in cui è memorizzato. Diverse parti del sistema potrebbero visualizzare due valori diversi per lo stesso riferimento, almeno temporaneamente.
Principio di responsabilità singola (SRP) significa che una classe dovrebbe solo avere una responsabilità o una ragione per cambiare. L'esempio che Fowler dà è quello di una classe Modem:
interface Modem
{
public void dial(String phoneNumber);
public void hangup();
public void send(char c);
public char recv();
}
Questa classe viola SRP, perché ha due principali responsabilità: stabilire una connessione e inviare dati. Per correggere il problema, dividere l'interfaccia in due interfacce diverse: un'interfaccia di connessione e un'interfaccia di comunicazione La prima interfaccia conterrebbe i metodi dial e hangup e la seconda interfaccia conterrà i metodi send e receive.
SRP non è una legge, ma solo un principio. A volte SRP viene violato per comodità o per altri motivi. Lo stesso vale per la normalizzazione del database; a volte i dati sono conservati in una forma denormalizzata (include alcune duplicazioni) per le prestazioni o altri motivi.
Persistenza L'ignoranza è un'altra forma di SRP: una classe non dovrebbe sapere come salvarsi in un archivio dati. Non è una sua responsabilità; è responsabilità di qualche altra classe. In caso contrario, dovresti modificare ogni classe che utilizza l'archivio dati se desideri modificare l'archivio dati in un altro tipo di archivio dati.