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? P>
4 Réponses :
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. P>
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é.
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." P>
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. P>
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 em> ils le font. En pensant aux interfaces comme des "coutures de responsabilité" est un bon départ. P>
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. P>
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. P>
non. Il ne casse pas SRP.
suppose que P> événement si Vous pouvez avoir ReportPrinter s'appuie sur DataAccess et ReportFormatter code>, tout changement de contrat de contrat de
Idataaccess ou IRPortformatter Code> doit être implémenté par
dataAccess and ReportFormatter code> respectivement.
reporterprinter code> ne s'inquiète pas des changements de responsabilité dans ces classes. em> p>
composition code> ou implémenter Médiateur Motif pour fournir un couplage lâche entre ces trois classes et obtenir un travail effectué. GARDER
COUPLAGE CODE> Partie à l'écart de
responsabilité code>. P> p>