8
votes

Confus sur le principe de responsabilité unique dans l'exemple suivant

Dans le suivant vidéo , l'auteur prend une classe existante et attribue le célibataire Principe de responsabilité à cela. Il prend une classe d'impression qui possède le travail d'accès aux données, au formatage et à l'impression du rapport. Il rompt chaque méthode à sa propre classe. Il crée donc une classe de dataaccess pour gérer l'accès des données, il crée une classe de format de rapport pour gérer la mise en forme du rapport et crée une classe de report de reportage pour gérer l'impression du rapport. La classe de rapport d'origine est ensuite laissée avec une méthode, imprimée () qui appelle la méthode de la classe de la classe de ReportPrinter. DataAccess et ReportFormatter semblent avoir la responsabilité, mais ReportPritter s'appuie sur DataAcess et ReportFormatter, alors cela ne casse-t-il pas le SRP ou je suis mal compris?


0 commentaires

4 Réponses :


1
votes

SRP ne traite pas des dépendances. Briser la classe dans les classes de la responsabilité unique facilitera la répartition des dépendances plus tard. SRP aborde l'un des deux principes de TETE mentionnés ensemble: cohésion et couplage. SRP concerne une cohésion élevée et les dépendances peuvent être indicatives d'un couplage élevé. Les bonnes conceptions ont une cohésion élevée et un faible couplage. Parfois, ces deux principes peuvent être en attente.


1 commentaires

Je dirais que la classe unique avec toute la mise en œuvre a un couplage plus élevé que les quatre classes distinctes. La classe unique est couplée à la mise en oeuvre de l'accès aux données, de la mise en forme et de l'impression, tandis que les quatre classes distinctes ne sont couplées que dans les définitions de chaque classe. Ce n'est pas parce qu'il y a plus de cours ne signifie pas qu'il y a un couplage plus élevé.



2
votes

Sans regarder la vidéo, cela ressemble à un design raisonnable. SRP n'est pas cassé, car les méthodes traitant de l'accès aux données n'apparaissent pas dans la classe ReportPritter, seul le concept que "je peux appeler quelque chose pour obtenir les données que je veux."

Vous pouvez le pousser un peu plus loin et disposer d'une classe de coordonnatrice responsable uniquement de coordonner les activités de la classe d'accès aux données, de la classe de formateurs et de la classe d'imprimante. Vous pouvez également organiser les objets de différentes manières, comme si le coordinateur envoie des données au formateur, qui l'envoie à l'imprimante et que le coordinateur ne connaît pas (directement) connu sur l'imprimante.

Quelque chose doit savoir la coordination des efforts des objets étroitement ciblés. Cela devient leur responsabilité. Il est normal de connaître l'idée ou le concept de ce que les autres objets feront, tant que vous ne le savez pas ou ne vous souciez pas comment ils le font. En pensant aux interfaces comme des "coutures de responsabilité" est un bon départ.

Il peut également être utile si vous pensez aux objets comme des données qui transmettent les unes aux autres plutôt que de «faire». Ainsi, le rapport de rapport revient (ou en avant) un nouvel objet représentant un rapport formaté, plutôt que (conceptuellement) effectuant des objets sur un rapport existant.


0 commentaires

3
votes

Le principe de responsabilité unique indique qu'une classe donnée devrait avoir une responsabilité unique (ou «raison de changer»). En soi, il n'indique pas comment cette responsabilité doit être satisfaite. Cela peut et peut souvent exiger la coopération de plusieurs autres classes en tant que collaborateurs.


0 commentaires

2
votes

non. Il ne casse pas SRP.

suppose que xxx

événement si ReportPrinter s'appuie sur DataAccess et ReportFormatter , tout changement de contrat de contrat de Idataaccess ou IRPortformatter doit être implémenté par dataAccess and ReportFormatter respectivement. reporterprinter ne s'inquiète pas des changements de responsabilité dans ces classes.

Vous pouvez avoir composition ou implémenter Médiateur Motif pour fournir un couplage lâche entre ces trois classes et obtenir un travail effectué. GARDER COUPLAGE Partie à l'écart de responsabilité .


0 commentaires