हमारे ज्ञान डोमेन में अपने नंगे पैरों के साथ दबाव-रिकॉर्डिंग प्लेट पर चलने वाले लोग शामिल हैं। हम छवि की पहचान करते हैं, जिसके परिणामस्वरूप 'फुट' वर्ग की वस्तुएं होती हैं, यदि सेंसर डेटा में एक मानव पैर को मान्यता दी जाती है।
कई गणनाएं हैं जिन्हें पैर के डेटा पर किया जाना चाहिए।
अब, कौन सा API बेहतर होगा:
class Foot : public RecognizedObject {
MaxPressureFrame getMaxPressureFrame();
FootAxis getFootAxis();
AnatomicalZones getAnatomicalZones();
// + similar getters for other calculations
// ...
}
या:
class Foot : public RecognizedObject {
virtual CalculationBase getCalculation(QString aName);
// ...
}
अब, वहाँ बहुत सारे हैं Pro और con मैं के साथ आ सकते हैं, लेकिन मैं वास्तव में तय नहीं कर सकते हैं जो सबसे महत्वपूर्ण हैं। ध्यान दें, यह एंड-यूज़र एप्लिकेशन है, न कि एक सॉफ़्टवेयर लाइब्रेरी जो हम बेचते हैं।
कोई सुझाव?
पहले दृष्टिकोण के लिए कुछ समर्थक हो सकते हैं:
- KISS - सब कुछ बहुत ठोस है। एपीआई, लेकिन कार्यान्वयन भी।
- दृढ़ता से टाइप किए गए रिटर्न मान।
- इस वर्ग से विरासत में लेना मूर्खतापूर्ण है। कुछ भी ओवरराइड नहीं किया जा सकता है, केवल जोड़ा गया है।
- एपीआई बहुत बंद है, कुछ भी अंदर नहीं जाता है, कुछ भी ओवरराइड नहीं किया जा सकता है, इसलिए कम गलत हो सकता है।
कुछ चोरों का:
- गेटर्स की संख्या बढ़ेगी, क्योंकि हमारे द्वारा गणना की गई हर नई गणना सूची में जुड़ जाती है
- एपीआई में बदलाव की संभावना अधिक होती है, और यदि ब्रेकिंग परिवर्तन पेश किए जाते हैं, तो हमें एक नया एपीआई संस्करण, एक Foot2 की आवश्यकता है।
- अन्य परियोजनाओं में वर्ग के पुन: उपयोग के मामले में, हमें हर गणना की आवश्यकता नहीं हो सकती है
दूसरे दृष्टिकोण के लिए कुछ समर्थक:
- अधिक लचीला
- एपीआई को बदलने की संभावना कम है, (यह मानते हुए कि हमें अमूर्तता सही लगी, यदि नहीं, तो बदलने में अधिक लागत आएगी)
कुछ चोरों का:
- शिथिल टाइप। हर आह्वान पर जातियां चाहिए।
- स्ट्रिंग पैरामीटर - मेरे मन में इसके बारे में गलत भावनाएँ हैं (स्ट्रिंग मूल्यों पर शाखा ...)
- कोई वर्तमान उपयोग मामला / आवश्यकता नहीं है जो अतिरिक्त लचीलेपन को अनिवार्य करता है, लेकिन भविष्य में हो सकता है।
- एपीआई प्रतिबंध लगाता है: हर गणना को एक बेस क्लास से प्राप्त करना होगा। गणना प्राप्त करना इस 1 विधि के माध्यम से मजबूर हो जाएगा, और अतिरिक्त मापदंडों को पारित करना असंभव होगा, जब तक कि हम गुजरने वाले मापदंडों के एक भी अधिक गतिशील, सुपर-लचीले तरीके से वसीयत नहीं करते हैं जो जटिलता को और भी अधिक बढ़ाता है।
getCalculation()
।
enum
मान बना सकते हैं और उस पर स्विच कर सकते हैं । फिर भी, मुझे लगता है कि दूसरा विकल्प बुराई है, क्योंकि यह KISS से भटक।