La funzione si trova in molti diversi tipi di programmi di editing in cui un clic del mouse può avere comandi completamente diversi da eseguire (usando il Command Pattern)
Attualmente ho una funzione determineClickCommand(clickFocus)
dominante.
Il corpo sembrava essenzialmente questo:
var command = null;
var args = null;
if (clickFocus == x) {
if (x.state == state) {
args = // Code to detemine args
command = new CommandA(args)
} else {
command = new CommandB()
}
} else if (clickFocus == y) {
args = blahablah;
command = new CommandC(args)
} else if (clickFocus == z) {
command = new CommandD()
} ...etc..etc...etc...
command.execute()
Che andava bene quando stavo prototipando, ma mi piacerebbe una soluzione più elegante. In particolare da quando, a un certo punto, voglio sfruttare il tasto destro del mouse / il tasto centrale del mouse, che potrebbe aggiungere una terza istruzione if annidata
La mia prima idea è quella di creare una classe AbstractClickScope
con un metodo determineClickCommand()
da sovrascrivere in ciascuna sottoclasse concreta di ambito. Questo rompe il problema in classi più manutenibili, ma l'ampia logica condizionale è la stessa identica. E se dovessi decidere di avere molti 'ambiti' allora una nuova lezione ogni volta sarebbe molto fastidiosa.
O forse hai una sorta di classe factory di comando rispetto a un metodo? Questo isola la creazione del comando in una parte molto specifica del codice.
Qualche altra idea? O implementazioni conosciute? Basta lanciare idee là fuori e cercare ulteriori informazioni come penso attraverso questo.