Ho due classi di base Operation
e Trigger
. Ognuno ha un numero di sottoclassi specializzate in determinati tipi di operazioni o trigger. A Trigger
può attivare uno specifico Operation
. Mentre un Operation
può essere attivato da uno specifico Trigger
.
Devo scrivere il codice che mappa un dato Operation
a un dato Trigger
(o viceversa), ma non sono sicuro di dove inserirlo.
In questo caso il codice non appartiene chiaramente a una classe o all'altra classe. Quindi, in termini di principio di responsabilità singola, non sono sicuro di dove debba appartenere il codice.
Vedo tre opzioni che funzionerebbero tutte. Mentre 1 e 2 sembrano essere solo una scelta di semantica, 3 rappresenta un approccio completamente diverso.
- Sul grilletto, ad es
bool Triggers(Operation o)
. - Sull'operazione, ad es
bool TriggeredBy(Trigger t)
. - In una classe completamente nuova che gestisce la mappatura, ad es
bool MappingExists(Trigger t, Operation o)
.
Come dovrei decidere dove posizionare il codice di mappatura condiviso rispetto a un unico principio di responsabilità?
Come gestire la responsabilità singola quando la responsabilità è condivisa?
Modifica 1.
Quindi il codice attuale è simile al seguente. Tutte le proprietà, sono sia un string
, Guid
, collection<string>
, o enum
. Fondamentalmente rappresentano solo piccoli pezzi di dati.
Modifica 2.
Il motivo del tipo di ritorno bool. Un'altra classe consumerà una raccolta di Trigger
e una raccolta di Operation
. Deve sapere dove esiste una mappatura tra a Trigger
e an Operation
. Utilizzerà tali informazioni per creare un rapporto.