Ho due classi base, Operation
e Trigger
. Ognuno ha un numero di sottoclassi che si specializzano in determinati tipi di operazioni o trigger. Un Trigger
può attivare uno specifico Operation
. Mentre Operation
può essere attivato da uno specifico Trigger
.
Ho bisogno di scrivere il codice che associa un dato Operation
a un dato Trigger
(o viceversa), ma non sono sicuro di dove metterlo.
In questo caso il codice non appartiene chiaramente a una classe o all'altra classe. Quindi, in termini di un principio di responsabilità singola, non sono sicuro di dove debba appartenere il codice.
Posso vedere tre opzioni che funzionerebbero tutte. Mentre 1 & 2 sembrano essere solo una scelta di semantica, 3 rappresenta un approccio completamente diverso.
- Sul trigger, ad es. %codice%.
- sull'operazione, ad es. %codice%.
- In una classe completamente nuova che gestisce la mappatura, ad es.
bool Triggers(Operation o)
.
Come dovrei decidere dove posizionare il codice di mappatura condivisa rispetto a un singolo principio di responsabilità?
Come gestire una singola responsabilità quando la responsabilità è condivisa?
Modifica 1.
Quindi il codice attuale è simile a questo. Tutte le proprietà sono o bool TriggeredBy(Trigger t)
, bool MappingExists(Trigger t, Operation o)
, string
o Guid
. In pratica rappresentano solo piccole porzioni di dati.
Modifica 2.
Il motivo per il tipo di ritorno di bool. Un'altra classe sta per consumare una raccolta di collection<string>
e una raccolta di enum
. È necessario sapere dove esiste una mappatura tra Trigger
e Operation
. Utilizzerà tali informazioni per creare un rapporto.