web-dev-qa-db-fra.com

Différence entre source unique de vérité et principe de responsabilité unique?

Je viens donc de découvrir le terme source unique de vérité en regardant des séries vidéo sur des entretiens de code de programmation.

D'après ce que j'ai compris, cela signifiait que la source unique de vérité est une encapsulation de tout type de fonctionnement/logique pouvant être utilisée plusieurs fois.

Cela me rappelait très fortement le [~ # ~ # ~ # ~] qui est à peu près la même chose dans un sens qu'il encapsule certaines opérations et/ou logiques qui pourraient être utilisées pour plusieurs fois.

Y a-t-il quelque chose de très subtile qu'il me manque ici?

Merci à tous pour votre temps.

9
AvetisG

Ce sont deux principes différents. À peu près la seule chose qu'ils ont en commun est le mot "célibataire".

(( une source unique de vérité Le résultat final du processus de Normaliser une base de données. Chaque information d'entité est stockée une fois et une seule fois.

Une source unique de vérité explique pourquoi nous mettons des clients dans une table et des produits dans un autre. En associant les clients avec des produits, à l'aide d'une table CustomerProducts, nous évitons de stocker des clients ou des produits dans deux endroits différents, et mettez plutôt des pointeurs dans la table des clientsProduits qui pointent sur chaque client et produit. Cela nous permet également d'associer plusieurs clients avec un produit et plusieurs produits avec un client, sans dupliquer des informations telles que le nom du produit ou son prix.

Avoir une seule source de vérité (chaque donnée est stockée dans un seul endroit) signifie que, lorsque vous modifiez cette donnée, tout le système voit le même changement au même instant. Contraste qu'avec plusieurs sources de vérité, où vous devez changer la donnée dans tous les endroits où il est stocké. Différentes parties du système peuvent voir deux valeurs différentes pour la même donnée, au moins temporairement.

(( Principe de responsabilité unique (SRP) signifie qu'une classe ne devrait avoir qu'une seule responsabilité ou une raison de changer. L'exemple que Fowler donne est celui d'une classe de modem:

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

Cette classe enfreint SRP, car elle a deux principales responsabilités: établir une connexion et envoyer des données. Pour corriger le problème, vous diviserez l'interface en deux interfaces différentes: une interface de connexion et un Interface de Communication. La première interface contiendrait les méthodes de cadran et de raccrochage et la deuxième interface contiendrait les méthodes d'envoi et de réception.

SRP n'est pas une loi, mais simplement un principe. Parfois, SRP est violé pour des raisons de commodité ou d'autres raisons. Il en va de même pour la normalisation de la base de données; Parfois, des données sont conservées sous une forme dénormalisée (inclut une certaine duplication) pour des raisons de performance ou d'autres raisons.

L'ignorance de la persistance est une autre forme de SRP: une classe ne devrait avoir aucune connaissance de la manière de se sauver dans un magasin de données. Ce n'est pas sa responsabilité; C'est la responsabilité d'une autre classe. Ce n'était-ce pas le cas, vous devriez changer chaque classe qui utilise le magasin de données si vous souhaitez modifier le magasin de données vers un autre type de magasin de données.

12
Robert Harvey

Umm, non? Vous semblez manquer assez significatif Distinctions!

Le principe de responsabilité unique n'envoie rien. Il ne reproduit aucun comportement/code/logique. Tout ce qu'il dit, c'est qu'une classe devrait faire une chose. Vous pouvez toujours avoir deux classes qui font la même chose. Le principe est totalement parfait avec ça.

La source unique de vérité n'envoie rien. C'est une ligne directrice qui vous aide à clarifier votre conception. Très souvent, vous avez deux versions ou plus des mêmes données. Une dans une base de données, une dans une cache, une en mémoire, une dans les clients, une dans la Sqllite assise sur un PC quelque part ... une source unique de vérité est quelque chose que vous désignez. Vous dites Ça L'un est celui qui gagne lorsque vos sources sont en désaccord. Ça Version est la vérité.

En bref, ils sont décidément non liés.

7
Telastyn