Uso o padrão de comando há algum tempo, mas nunca tenho muita certeza da quantidade de lógica que posso colocar no Execute
método.
Minha implementação atual do padrão de comando é semelhante a esta:
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 estas são as perguntas que me faço (e pratico em meus comandos):
- É bom mostrar caixas de mensagens ou caixas de diálogo de arquivo etc.?
- É possível definir propriedades de qualquer objeto?
- Um comando pode conter lógica de negócios?
- Um comando pode modificar os controles da GUI de qualquer maneira?
- Quais comandos de camada pertencem? Visualizar ou camada de dados? Posso ter comandos nas duas camadas?
- Um comando pode fazer tudo o que anteriormente estava no
button1_Click
? - Um comando deve ser testado por unidade?
- Um comando pode ser visto como um usuário que faz uso das APIs e que cria a última camada de um aplicativo e também o último recurso para capturar exceções?
- Os comandos podem ser executados também por código (o comando chama api, o api executa e, por fim, outro API chama o comando) ou apenas o usuário pode invocá-lo e as APIs não devem saber da existência dele?
- Existe um lugar para comandos no MVC ou MVVC ou qualquer outro padrão de design com um controlador? Eles parecem ser mutuamente exclusivos. O que é preferível?
Existem vários tutoriais mostrando como implementar o padrão de comando, mas nenhum discute como aplicá-lo em um aplicativo real.