Eu tenho essa implementação antiga do padrão de comando. É meio que passar um Contexto por toda a implementação da DIOperation , mas percebi mais tarde, no processo de aprendizado e aprendizado (que nunca para), que não é o ideal. Eu também acho que a "visita" aqui realmente não se encaixa e apenas confunde.
Na verdade, estou pensando em refatorar meu código, também porque um Comando não deve saber nada sobre os outros e, no momento, todos compartilham os mesmos pares de valores-chave. É realmente difícil manter qual classe possui qual valor-chave, às vezes levando à duplicação de variáveis.
Um exemplo de caso de uso: digamos que CommandB exija UserName, definido por CommandA . CommandA deve definir a chave UserNameForCommandB = John ? Ou eles devem compartilhar um valor-chave comum UserName = John ? E se o UserName for usado por um terceiro comando?
Como posso melhorar esse design? Obrigado!
class DIParameters {
public:
/**
* Parameter setter.
*/
virtual void setParameter(std::string key, std::string value) = 0;
/**
* Parameter getter.
*/
virtual std::string getParameter(std::string key) const = 0;
virtual ~DIParameters() = 0;
};
class DIOperation {
public:
/**
* Visit before performing execution.
*/
virtual void visitBefore(DIParameters& visitee) = 0;
/**
* Perform.
*/
virtual int perform() = 0;
/**
* Visit after performing execution.
*/
virtual void visitAfter(DIParameters& visitee) = 0;
virtual ~DIOperation() = 0;
};