J'ai base deux classes, Operation
et Trigger
. Chacun a un certain nombre de sous-classes qui se spécialisent dans certains types d'opérations ou de déclencheurs. Un Trigger
peut déclencher un spécifique Operation
. Alors qu'un Operation
peut être déclenché par un spécifique Trigger
.
J'ai besoin d'écrire le code qui mappe un donné Operation
à un donné Trigger
(ou vice versa), mais je ne sais pas où le mettre.
Dans ce cas, le code n'appartient pas clairement à une classe ou à l'autre classe. Donc, en termes de principe de responsabilité unique, je ne sais pas où le code devrait appartenir.
Je peux voir trois options qui fonctionneraient toutes. Alors que 1 et 2 ne semblent être qu'un choix de sémantique, 3 représente une approche complètement différente.
- Sur la gâchette, par exemple
bool Triggers(Operation o)
. - Sur l'opération, par exemple
bool TriggeredBy(Trigger t)
. - Dans une classe entièrement nouvelle qui gère le mappage, par exemple
bool MappingExists(Trigger t, Operation o)
.
Comment dois-je décider où placer le code de mappage partagé dans le respect d'un principe de responsabilité unique?
Comment gérer la responsabilité unique lorsque la responsabilité est partagée?
Modifier 1.
Ainsi, le code réel ressemble à ceci. Toutes les propriétés sont soit un string
, Guid
, collection<string>
ou enum
. Ils représentent simplement de petites données.
Modifier 2.
La raison du type de retour de bool. Une autre classe va consommer une collection de Trigger
et une collection de Operation
. Il doit savoir où existe une correspondance entre a Trigger
et an Operation
. Il utilisera ces informations pour créer un rapport.