이 이전의 명령 패턴 구현이 있습니다. 그것은 모든 DIOperation 구현을 통해 Context를 전달하는 것이지만, 학습과 학습 과정에서 멈추지 않는 나중에 실현되지 않는 것을 나중에 깨달았습니다. 또한 여기에있는 "방문"은 실제로 적합하지 않으며 혼동된다고 생각합니다.
나는 실제로 내 코드를 리팩토링하려고 생각하고 있습니다. 명령은 다른 것에 대해 아무것도 알지 못하고 현재 모두 동일한 키-값 쌍을 공유하기 때문입니다. 어떤 클래스가 어떤 키-값을 소유 하는지를 유지하는 것은 실제로 어렵고 때로는 변수를 복제합니다.
사용 사례의 예 : CommandB 에 CommandA에 의해 설정된 UserName 이 필요 하다고 가정 해 봅시다 . CommandA가 UserNameForCommandB = John 키를 설정해야합니까 ? 아니면 공통 UserName = John 키-값 을 공유해야 합니까? 세 번째 명령에서 UserName을 사용하면 어떻게됩니까?
이 디자인을 어떻게 개선 할 수 있습니까? 감사!
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;
};