Tengo esta antigua implementación del patrón de comando. Es como pasar un contexto a través de toda la implementación de DIOperation , pero más tarde me di cuenta, en el proceso de aprendizaje y aprendizaje (que nunca se detiene), que no es óptimo. También creo que la "visita" aquí realmente no encaja y simplemente confunde.
Realmente estoy pensando en refactorizar mi código, también porque un Comando no debe saber nada acerca de los demás y en este momento todos comparten los mismos pares clave-valor. Es realmente difícil mantener qué clase posee qué valor clave, lo que a veces conduce a variables duplicadas.
Un ejemplo de caso de uso: digamos que CommandB requiere UserName, que se establece mediante CommandA . ¿Debería CommandA establecer la clave UserNameForCommandB = John ? ¿O deberían compartir un nombre de usuario común = valor-clave de John ? ¿Qué pasa si el nombre de usuario es utilizado por un tercer comando?
¿Cómo puedo mejorar este diseño? ¡Gracias!
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;
};
fuente