تغيير السلوك الافتراضي في C ++ تطبيق مع الإضافات [مغلقة]

StackOverflow https://stackoverflow.com/questions/311247

  •  10-07-2019
  •  | 
  •  

سؤال

وباختصار: ما هي أفضل طريقة لتصميم وتنفيذ آلية مصنع + البرنامج المساعد، بحيث الإضافات يمكن أن تحل محل الكائنات في التطبيق الرئيسي

ولدينا قاعدة رمز من الذي نبني طلباتنا. قانون الأساس على ما يرام ل70-95٪ من الطلبات، وهذا يعني أننا بحاجة في كل طلب جديد لتغيير 5-30٪ من السلوك الافتراضي (إضافة ميزات جديدة، والمنطق الافتراضي تغيير أو إضافة واجهة المستخدم الرسومية، الخ.).

وتنفيذ قائم على المساعد: هو مبني على قاعدة قانون إلى EXE و DLL، وعندما EXE الرئيسي هو تشغيل نحن تحميل DLL الذي يضيف وظائف المطلوبة

.

وحاليا كل المكونات في الكشف عن وظيفة التالية:

PluginInterface* PluginInit()
{
    return new MyCustomizedPluginInterface();
}

وأين يعرف PluginInterface على النحو التالي:

class PluginInterface {
public:
    virtual SomeClass1* customizedSomeClass1() = 0;
    virtual SomeClass2* customizedSomeClass2() = 0;
};

وSomeClass1 / SomeClass2 ديك بعض السلوك الافتراضي، ولكن يمكن أن يتم تجاوز وتغييرها من قبل المساعد.

وتنفيذ الحالي يجعل من الصعب على إضافة فئات مخصصة جديدة. ونود أن تحل محل كل فئة في التطبيق الرئيسي من البرنامج المساعد، لذلك فمن المنطقي لاستخدام المصانع الكائن.

واحد SDK وأنا أعلم أن يستخدم تقنية التالية:

PluginInterface* PluginInit(GodObject* godObject)
{
    FactoryForSomeClasses* factoryForSomeClasses = 
        godObject->factoryForSomeClasses();
    factoryForSomeClasses->setSomeClass1Creator( MyCustomizedSomeClass1::create); // create is a static creator function.
    factoryForSomeClasses->setSomeClass2Creator( MyCustomizedSomeClass2::create);
}

وأنا أتساءل عما إذا كان هناك أي بدائل لهذا النهج.

وكيف تنصحين تصميم وتنفيذ نظام المساعد / مصنع وكأنني مجرد وصفها؟

هل كانت مفيدة؟

المحلول

وكان هناك مقال في حين يعود في طبيب Dobb التي تمت فيه مناقشة هذه المشكلة بالضبط. هنا هو رابط لهذه المادة في المسألة.

وبوصفها جانبا قد ترغب في البقاء مع واجهة C على التوالي لالإضافات إلى المشروع. وبهذه الطريقة يمكن ربط كود مكتوب بلغة تقريبا أي في إطار الخاص بك مع الحد الأدنى من المتاعب. بينما C ++ هو لطيف، أن تكون قادرة على الاستفادة أكثر من ما هو موجود في C ++، مثل الأطر لا يصدق الموجودة في الأراضي جافا وبيثون، يمكن أن تكون مفيدة على المدى الطويل.

نصائح أخرى

هل نظرتم أمثلة CodeProject عن الأطر الإضافات؟ https://secure.codeproject.com/KB/DLL/plugin.aspx http://www.codeproject.com/KB/library/dynobj.aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top