Ich habe diese alte Implementierung des Befehlsmusters. Es ist eine Art Kontext durch die gesamte DIOperation- Implementierung zu führen, aber ich habe später im Lern- und Lernprozess (der niemals aufhört) festgestellt, dass dies nicht optimal ist. Ich denke auch, dass der "Besuch" hier nicht wirklich passt und nur verwirrt.
Ich denke tatsächlich darüber nach, meinen Code umzugestalten, auch weil ein Befehl nichts über die anderen wissen sollte und im Moment alle dieselben Schlüssel-Wert-Paare haben. Es ist wirklich schwer zu behaupten, welche Klasse welchen Schlüsselwert besitzt, was manchmal zu doppelten Variablen führt.
Ein Anwendungsbeispiel: Angenommen , CommandB benötigt UserName, der von CommandA festgelegt wird . Sollte CommandA den Schlüssel UserNameForCommandB = John setzen ? Oder sollten sie einen gemeinsamen Benutzernamen = John- Schlüsselwert haben? Was ist, wenn der Benutzername von einem dritten Befehl verwendet wird?
Wie kann ich dieses Design verbessern? Vielen Dank!
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;
};