У мене є ця стара реалізація шаблону Command. Це свого роду передача контексту через всю реалізацію DIOperation , але я зрозумів, що пізніше, в процесі навчання та навчання (що ніколи не припиняється), це не є оптимальним. Я також думаю, що "відвідування" тут насправді не підходить і просто плутає.
Я насправді думаю про рефакторинг свого коду ще й тому, що Команда нічого не повинна знати про інших, і в даний момент всі вони мають однакові пари ключ-значення. Дійсно важко підтримувати, якому класу належить який ключ-значення, іноді призводить до дублювання змінних.
Приклад варіанту використання: припустимо CommandB вимагає UserName , який встановлюється CommandA . Чи повинен CommandA встановити ключ UserNameForCommandB = John ? Або вони повинні мати спільне UserName = Ідентифікатор ключових значень? Що робити, якщо 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;
};