回答:
これらは2つの異なる原則です。彼らが共通して持っているものはほとんど「単一」という言葉だけです。
Single Source of Truthは、データベースを正規化するプロセスの最終結果です。 エンティティ情報のすべての部分は、一度だけ保存されます。
Single of Source of Truthは、顧客を1つの表に、製品を別の表に入れる理由を説明しています。CustomerProductsテーブルを使用して顧客を製品に関連付けることにより、顧客または製品の2つの異なる場所への格納を回避し、代わりに各顧客および製品を指すポインターをCustomerProductsテーブルに配置します。これにより、製品名や価格などの情報を複製することなく、複数の顧客を1つの製品に関連付けたり、複数の製品を1つの顧客に関連付けたりすることもできます。
単一のソースの真実(各データは1か所にのみ保存されます)を持つということは、そのデータを変更すると、システム全体が同じ瞬間に同じ変更を認識することを意味します。それが格納されているすべての場所でデータを変更する必要がある真実の複数のソースとは対照的です。システムの異なる部分では、少なくとも一時的に、同じデータムに対して2つの異なる値が表示される場合があります。
単一責任原則(SRP)とは、クラスには1つの責任または変更する1つの理由のみが必要であることを意味します。Fowlerが提供する例は、モデムクラスの例です。
interface Modem
{
public void dial(String phoneNumber);
public void hangup();
public void send(char c);
public char recv();
}
このクラスは、接続の確立とデータの送信という2つの大きな責任があるため、SRPに違反しています。 この問題を修正するには、インターフェースを2つの異なるインターフェース(接続インターフェースと通信インターフェース)に分割します。最初のインターフェイスには、dialメソッドとhangupメソッドが含まれ、2番目のインターフェイスには、sendメソッドとreceiveメソッドが含まれます。
SRPは法律ではなく、単なる原則です。SRPは、便宜上またはその他の理由で違反する場合があります。データベースの正規化についても同様です。パフォーマンスやその他の理由により、データが非正規化された形式(一部の重複を含む)で保持される場合があります。
Persistence IgnoranceはSRPの別の形式です。クラスは、それ自体をデータストアに保存する方法を知らないはずです。 それはその責任ではありません。それは他のクラスの責任です。そうでない場合、データストアを他のタイプのデータストアに変更する場合は、データストアを使用するすべてのクラスを変更する必要があります。
うーん、違う?あなたはかなり重要な違いを見逃しているようです!
単一責任の原則は何もカプセル化しません。ビヘイビア/コード/ロジックの重複は排除されません。クラスが行うべきことは1つだけです。同じことを行う2つのクラスを保持できます。原則はそれで全く問題ありません。
唯一の真実の情報源は何もカプセル化していません。これは、設計を明確にするのに役立つガイドラインです。多くの場合、同じデータの2つ以上のバージョンがあります。1つはデータベース、1つはキャッシュ、1つはメモリ、1つはクライアントサイド、もう1つはPCのどこかにあるsqlliteにあります...真実の単一のソースは、指定したものです。あなたが言うことをあなたのソースが一致しないとき、1が勝ちというものです。そのバージョンは真実です。
つまり、これらは明らかに無関係です。