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.