У меня есть эта старая реализация шаблона Command. Это своего рода передача контекста через всю реализацию DIOperation , но позже я понял, что в процессе обучения и обучения (что никогда не останавливается) это не оптимально. Я также думаю, что «посещение» здесь не совсем подходит и просто сбивает с толку.
Я на самом деле думаю о рефакторинге своего кода, в том числе потому, что команда не должна ничего знать о других, и в данный момент все они используют одни и те же пары ключ-значение. Действительно сложно определить, какому классу принадлежит какое значение ключа, что иногда приводит к дублированию переменных.
Пример варианта использования: допустим, для CommandB требуется UserName, который устанавливается CommandA . Должна ли 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;
};