J'ai cette ancienne implémentation du modèle de commande. C'est en quelque sorte passer un Contexte à travers toute l' implémentation de DIOperation , mais j'ai réalisé plus tard, dans le processus d'apprentissage et d'apprentissage (qui ne s'arrête jamais), que ce n'est pas optimal. Je pense aussi que la "visite" ici ne correspond pas vraiment et confond simplement.
Je pense en fait à refactoriser mon code, également parce qu'une commande ne devrait rien savoir des autres et, pour le moment, elles partagent toutes les mêmes paires clé-valeur. Il est vraiment difficile de conserver quelle classe possède quelle valeur-clé, ce qui conduit parfois à des variables en double.
Un exemple de cas d'utilisation: disons que CommandB nécessite UserName qui est défini par CommandA . CommandA doit-il définir la clé UserNameForCommandB = John ? Ou devraient-ils partager une valeur-clé UserName = John commune ? Que faire si le nom d'utilisateur est utilisé par une troisième commande?
Comment puis-je améliorer cette conception? Merci!
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;
};