Creazione di Set sottoclassi o Consenti configurazione esterna

0

Ho una TriggerCaller e una TriggerAction class. Il chiamante "chiama" il metodo do() sull'azione, che viene impostato con il metodo TriggerCaller s setAction() . Il resto del programma dovrebbe occuparsi della classe Trigger , che contiene il chiamante e l'azione.

Ho due opzioni:

1) Assegna alla classe Trigger i metodi setAction e setCaller . Questo sembra avere senso perché significa che non dovrò ridefinire le cose per ogni sottoclasse (vedi opzione 2) e non favorirò un oggetto rispetto all'altro (vedi opzione 3).

2) Posso definire Trigger sottoclassi per ogni combinazione di Chiamata-Azione. Questo sembra "sentirsi" meglio per qualche ragione che non riesco ad articolare, ma è poco pratico. Ci sono semplicemente troppe combinazioni di TriggerCaller e TriggerActions da fare.

3) Definisci una sottoclasse Trigger per ogni TriggerCaller , ad esempio TriggerMIDI per MIDICaller e assegna a quella classe un setAction() . Questo sembra avere senso da una prospettiva GUI, perché nell'interfaccia le persone selezionano il tipo TriggerCaller da un menu "Crea" e poi lo configura con un'azione in una finestra di dialogo (insieme ad altre cose).

Sento che (1) ha più senso, ma in qualche modo sembra solo ... sbagliato. Penso di esporre troppo del funzionamento interno delle classi. Sto anche ponendo l'onere sul codice GUI di impostare la classe (sorta di). C'è una soluzione migliore? Quale dovrei scegliere?

    
posta sinθ 21.07.2013 - 23:04
fonte

1 risposta

-1

Io sceglierei l'opzione 1 ma con una piccola modifica: poiché sembra che un trigger non possa funzionare senza un'azione e un chiamante, sposterei l'iniezione di quelle dipendenze fino al costruttore di Trigger (e probabilmente rimuoverò i setter).

Inoltre:

 I'm also putting the burden on the GUI code of setting the class up (sort of).

La responsabilità di impostare il trigger non dovrebbe essere sulla GUI. Creerei un TriggerFactory la cui unica responsabilità è creare trigger su richiesta. Avrebbe metodi semantici che i client potrebbero chiamare per ottenere i trigger completamente cablati.

Alcuni esempi di questi metodi potrebbero essere

TriggerFactory.buildMidiTrigger();
TriggerFactory.buildEmailTrigger();
etc...
    
risposta data 18.08.2013 - 13:35
fonte