Ho due classi di base Operatione Trigger. Ognuno ha un numero di sottoclassi specializzate in determinati tipi di operazioni o trigger. A Triggerpuò attivare uno specifico Operation. Mentre un Operationpuò essere attivato da uno specifico Trigger.
Devo scrivere il codice che mappa un dato Operationa 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 Triggere una raccolta di Operation. Deve sapere dove esiste una mappatura tra a Triggere an Operation. Utilizzerà tali informazioni per creare un rapporto.
