SRP: Pourquoi exemple d'utiliser des valeurs de champ au lieu des paramètres?
Question
Je viens de lire SRP, aussi facile que 123 ... , et tout cela résonne avec moi, sauf un paragraphe, dans une section intitulée « cohésion » (je l'ai fait valoir devant pour « obtenir » la cohésion, mais parler de paramètres vs exemple champs me donne une pause ...):
Prenez votre classe. Regardez vos méthodes. Ont-ils des paramètres ou sont-ils en utilisant des champs d'instance? Si ils sont en utilisant les paramètres, les supprimer. Faire eux champs d'instance. vous retrouvez-vous avec des procédés qui utilisent uniquement l'un des cinq cas? C'est très probablement un avertissement de la faible cohésion que existe entre cette méthode et votre classe.
Est-ce la suppression des paramètres simplement un exercice temporaire pour révéler les méthodes qui approchent-capacité statique (faible cohésion), l'idée étant que vous revenez à l'utilisation des paramètres lorsque vous avez terminé?
Ou est la préférence pour les champs d'instance sur les paramètres d'une technique de conception réelle de maintenir la cohésion élevée?
Ai-je pris en quelque sorte la citation hors contexte?
La solution
CRUD est une véritable approche commune à l'interface de programmation basée. Prenez deux classes de béton qui mettent en œuvre une interface CRUD:. Employés et construction
Maintenant, imaginez comment votre code ressemblera à être paramètre basé:
Employee employeeObj = new Employee();
Building buildingObj = new Building();
string firstName = "Bob";
employeeObj.Create(firstName);
Qu'en est-il construire?
BuildingTypes buildingType = BuildingTypes.One;
building.Create(buildingType);
... Woops comment êtes-vous censé mettre en œuvre l'interface CRUD avec des paramètres différents? Créer des surcharges? Plus d'interfaces? Qu'en est-il deux params (prenom nom)?
Ce sera si laid si vite .... parce que dès que vous utilisez les paramètres avec une CRUD interface que vous avez plus d'une raison de changement, ce qui diminue la cohésion de la conception.
essayer de Let utiliser nos objets / par exemple à base params ...
Employee empObj = new Employee();
empObj.FirstName = "Bob";
empObj.Create();
Building buildingObj = new Building();
buildingObj.BuildingType = BuildingTypes.One;
buildingObj.Create();
Avec CRUD simple et pas params on peut même saupoudrez polymorphisme:
someObj.Create();
Cela conduit aussi à la composition de encapsulé, découplage, SRP, etc ...