我有Command模式的旧实现。这是通过所有DIOperation实现传递一个Context的方法,但是后来我意识到,在学习过程中(永远不会停止),这并不是最佳的。我也认为这里的“访问”并不适合,只会造成混乱。
我实际上是在考虑重构我的代码,这也是因为一个Command对其他命令一无所知,并且现在它们都共享相同的键值对。很难维护哪个类拥有哪个键值,有时会导致变量重复。
用例示例:假设CommandB需要由CommandA设置的UserName。CommandA是否应该设置键UserNameForCommandB = John?还是应该共享一个公共的UserName = John键值?如果用户名被第三个命令使用怎么办?
如何改善设计?谢谢!
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;
};