Ho questa vecchia implementazione del pattern Command. È un po 'come passare un contesto attraverso l'implementazione DIOperation , ma mi sono reso conto più avanti, nel processo di apprendimento e apprendimento (che non si ferma mai), che non è ottimale. Penso anche che la "visita" qui non sia davvero adatta e confonda semplicemente.
In realtà sto pensando di ridefinire il mio codice, anche perché un Comando non dovrebbe sapere nulla degli altri e al momento condividono tutte le stesse coppie chiave-valore. È davvero difficile mantenere quale classe possiede quale valore-chiave, a volte portando a variabili duplicate.
Un esempio di caso d'uso: diciamo che CommandB richiede UserName che è impostato da < em> Commanda . CommandA dovrebbe impostare la chiave UserNameForCommandB = John ? O dovrebbero condividere un comune valore chiave UserName = John ? Cosa succede se UserName viene utilizzato da un terzo comando?
Come posso migliorare questo design? Grazie!
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;
};