Mam tę starą implementację wzorca poleceń. To rodzaj przekazywania kontekstu przez całą implementację DIOperation , ale później uświadomiłem sobie, że proces uczenia się i uczenia się (który nigdy się nie kończy) nie jest optymalny. Myślę też, że „odwiedzanie” tutaj nie pasuje i po prostu myli.
Właściwie myślę o refaktoryzacji mojego kodu, również dlatego, że polecenie nie powinno nic wiedzieć o innych, a obecnie wszystkie mają te same pary klucz-wartość. Naprawdę trudno jest utrzymać, która klasa jest właścicielem której klucz-wartość, co czasami prowadzi do zduplikowania zmiennych.
Przykładem przypadku użycia: powiedzmy CommandB wymaga nazwa_użytkownika , która jest tworzona przez CommandA . Czy CommandA powinien ustawić klucz UserNameForCommandB = John ? A może powinny dzielić wspólną wartość UserName = John klucz-wartość? Co jeśli nazwa użytkownika jest używana przez trzecie polecenie?
Jak mogę ulepszyć ten projekt? Dzięki!
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;
};