Mi chiedo se stai cercando di implementare il Pattern di comando tramite metodi privati e potresti trovare il passaggio a un modello di comando più facile per quello che stai facendo.
Quello che hai ora è questo:
public void callThisMethod(MyObject myObject) {
methodA(myObject);
mehtodB(myObject)
}
private void methodA(MyObject myObject) {
//do something
}
private void methodB(MyObject myObject) {
//do something
}
Potresti implementare la stessa cosa usando i comandi e un dispatcher.
public interface Command {
void Execute(Context c);
}
public class Context {
// this holds shared data
}
public class Dispatcher
{
private List<Command> _commands = new List<Command>();
public void Add(Command cmd)
{
_commands.Add(cmd);
}
public void Run(Context c)
{
foreach(Command cmd in _commands) { cmd.Execute(c); }
}
}
Ora implementeresti i tuoi metodi privati come comandi.
public class CommandA : Command { ... }
public class CommandB : Command { ... }
Qualsiasi informazione di stato speciale è definita nella classe Context
che verrà passata a ciascun comando. Per eseguire il codice devi aggiungere i comandi al dispatcher ed eseguirlo.
Dispatcher d = new Dispatcher();
d.Add(new CommandA());
d.Add(new CommandB());
d.Run(new Context());
Il vantaggio di questo approccio è che disaccoppia i comandi gli uni dagli altri, e tu usi la classe Context
per far funzionare tutto insieme. È inoltre possibile aggiungere la logica a quali comandi vengono creati e quali parametri vengono utilizzati per istanziarli.
Alcuni altri suggerimenti, puoi creare singleton di comandi comunemente usati per ridurre il sovraccarico nella creazione di nuovi sempre.
Questo approccio è altamente verificabile poiché ogni comando può essere isolato.
Lo svantaggio è che una vasta collezione di comandi può diventare difficile da mantenere. È meglio creare grossi comandi che possono fare molte cose, piuttosto che semplici piccoli comandi in grande numero.