Ho questa vecchia implementazione del modello di comando. È un po 'passare un contesto attraverso tutta l' implementazione DIOperation , ma in seguito mi sono reso conto, nel processo di apprendimento e apprendimento (che non si ferma mai), che non è ottimale. Penso anche che la "visita" qui non si adatti davvero e confonda.
In realtà sto pensando di refactoring del mio codice, anche perché un comando non dovrebbe sapere nulla degli altri e al momento condividono tutti 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 impostato da CommandA . CommandA dovrebbe impostare la chiave UserNameForCommandB = John ? O dovrebbero condividere un UserName comune = valore-chiave 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;
};