Ho controller che esegue alcuni comandi in base al nome del comando, presi dall'URL. Il punto principale è non usare le clausole if e switch. Come so ci sono solo due modi come farlo - 1) comando schema 2) riflessione.Command pattern vs reflection
//Command pattern
class Controller{
private HashMap<String,Command> commands;
public void executeCommand(String commandName){
commands.get(commandName).execute();
}
...
}
//reflection
class Controller{
public void readCommand(){
....
}
public void executeCommand(String commandName){
this.getClass().getMethod(commandName+"Command").invoke(this);
}
...
}
Così i questios:
- che uno è meglio?
- È normale in un'applicazione consentire agli sviluppatori di utilizzare uno dei metodi che desiderano.
- Ci sono altri modi?
Cosa succede se l'utente immette 'execute'? Ciò causerà 'executeCommand' per provare a chiamarsi in modo ricorsivo? Usando il reflection in questo modo, dove si utilizza una stringa immessa dall'utente per determinare quale metodo utilizzare, appare molto ** pericoloso. Potrebbe anche mettere un segno sul tuo programma dicendo "Ehi, cybercriminali! QUESTO MODO !!!" – ajb
@ajb Grazie per il tuo commento. Lo so, ecco perché usiamo url mapper via xml (url -> component, command). Ho scritto "preso dall'URL" per passare l'idea. –