Utilizzo lo schema di comando da un po 'di tempo ma non sono mai veramente sicuro di quanta logica posso effettivamente inserire nel metodo   Execute   . 
La mia attuale implementazione del modello di comando è simile a questa:
public abstract class Command
{
    public static event EventHandler Completed = delegate { };        
    public bool Success { get; private set; }
    public Exception Exception {get; private set; }
    public abstract bool Execute();
    protected bool OnCompleted(bool success, Exception ex = null)
    {       
        Success = success;
        Exception = ex;
        Completed(this, EventArgs.Empty)
        return success;
    }
}
e queste sono le domande che mi pongo (e pratico nei miei comandi):
- È OK mostrare caselle di messaggistica o aprire finestre di dialogo ecc.?
 - Va bene impostare proprietà di qualsiasi oggetto?
 - Un comando può contenere la logica aziendale?
 - Può un comando modificare i controlli della GUI in ogni caso?
 - A quale livello appartengono i comandi? Visualizza o livello dati? Posso avere comandi in entrambi i livelli?
 -  Un comando può fare tutto ciò che prima era    
button1_Click? - Dovrebbe un comando per unità testabile?
 - Un comando può essere visto come un utente che fa uso delle API e che costruisce l'ultimo livello di un'applicazione e anche l'ultima risorsa per catturare le eccezioni?
 - I comandi possono essere eseguiti anche tramite codice (il comando chiama api, api esegue e infine qualche altro api chiama un comando) oppure può solo l'utente invocarlo e le API non devono sapere dell'esistenza?
 - Esiste un posto per i comandi in MVC o MVVC o in qualsiasi altro modello di progettazione con un controller? Sembrano escludersi a vicenda. Cosa è preferibile?
 
Ci sono molti tutorial che mostrano come implementare il pattern di comando, ma nessuno in realtà discute su come applicarlo in una vera e propria applicazione wold.