मेरे पास कमांड पैटर्न का यह पुराना कार्यान्वयन है। यह सभी DIOperation कार्यान्वयन के माध्यम से एक संदर्भ पारित करने का एक प्रकार है , लेकिन मुझे बाद में पता चला, सीखने और सीखने की प्रक्रिया में (जो कभी नहीं रुकता), यह इष्टतम नहीं है। मुझे भी लगता है कि यहां "दौरा" वास्तव में फिट नहीं है और सिर्फ भ्रमित करता है।
मैं वास्तव में अपने कोड को फिर से भरने के बारे में सोच रहा हूं, इसलिए भी कि एक कमांड को दूसरों के बारे में कुछ नहीं पता होना चाहिए और फिलहाल वे सभी एक ही कुंजी-मूल्य वाले जोड़े साझा करते हैं। यह वास्तव में कठिन है कि कौन सा वर्ग किस कुंजी-मूल्य का मालिक है, कभी-कभी डुप्लिकेट चर का नेतृत्व करता है।
उपयोग के मामले का एक उदाहरण: मान लें कि CommandB को UserName की आवश्यकता है जो CommandA द्वारा निर्धारित है । क्या CommandA ने UserNameForCommandB = 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;
};