Tôi có triển khai mẫu cũ này. Đó là loại thông qua một bối cảnh thông qua tất cả các triển khai DIOperation , nhưng tôi nhận ra sau này, trong quá trình học và học (điều đó không bao giờ dừng lại), điều đó không tối ưu. Tôi cũng nghĩ rằng việc "ghé thăm" ở đây không thực sự phù hợp và chỉ gây nhầm lẫn.
Tôi thực sự đang nghĩ đến việc tái cấu trúc mã của mình, cũng bởi vì một Lệnh không biết gì về những cái khác và tại thời điểm này, tất cả chúng đều có chung các cặp khóa-giá trị. Thật sự rất khó để duy trì lớp nào sở hữu khóa-giá trị nào, đôi khi dẫn đến các biến trùng lặp.
Một ví dụ về trường hợp sử dụng: giả sử CommandB yêu cầu Tên người dùng được đặt bởi CommandA . CommandA có nên đặt khóa UserNameForCommandB = John không? Hoặc họ nên chia sẻ một UserName = John key-value chung? Nếu Tên người dùng được sử dụng bởi Lệnh thứ ba thì sao?
Làm thế nào tôi có thể cải thiện thiết kế này? Cảm ơn!
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;
};