मान लीजिए कि मैंने सी, या किसी अन्य प्रक्रियात्मक प्रोग्रामिंग भाषा में एक बड़ा आवेदन लिखने का निर्णय लिया है।प्रक्रियात्मक प्रोग्रामिंग के लिए निर्भरता इंजेक्शन
A
|
+-------------+
| |
B1 B2
| |
+------+ +------+
| | | |
C11 C12 C21 C22
जाहिर है, इकाई परीक्षण पत्ते काम करता है, C11, C12, C21, और C22 बहुत आसान है:: सेटअप आदानों, कार्यों आह्वान, जोर ऐसा नहीं है कि इस तरह दिखना कॉल-निर्भरता के साथ कार्य करता है आउटपुट।
लेकिन बी 1, बी 2 और ए के लिए अच्छी इकाई परीक्षण को सक्षम करने के लिए उचित रणनीति क्या है?
Dependency Injection सुझाव देगा कि B1
(और B2
भी) के रूप में घोषित किया जाना चाहिए?
// Declare B1 with dependency injection for invoking C11 and C12.
int B1(int input, int (*c11)(int), int(*c12)(int));
लेकिन अगर मेरी कॉल की कई परतें हैं तो यह रणनीति स्केलेबल प्रतीत नहीं होती है। बस कल्पना करें कि A
के लिए घोषणा क्या दिखाई देगी:
int A(int input, int (*b1)(int, int (*)(int), int(*)(int)),
int(*b2)(int, int (*)(int), int(*)(int)),
int (*c11)(int),
int (*c12)(int),
int (*c21)(int),
int (*c22)(int));
यक! कोई बेहतर तरीका ज़रूर होगा।
कभी-कभी, मुझे लगता है कि डीआई और अन्य समान पैटर्न जो मॉड्यूलरिटी को बढ़ावा देने और रखरखाव की आसानी को बढ़ावा देने के लिए वास्तव में कोड स्पष्टता को प्रभावित करते हैं और जटिल हैं जो बकवास अवशोषण और ठोस संकेतों में सीधा कोडिंग होना चाहिए।
सी में बड़ी सॉफ्टवेयर परियोजनाएं जैसे कि पर्ल और रूबी, यूनिट-परीक्षण से संबंधित हैं?
यह एक दिलचस्प विचार है। मुझे इसे आजमाना होगा। – kirakun
आप प्रक्रिया में न केवल सीओ में ओओ प्रोग्राम भी कर सकते हैं। केवल डेटा सदस्यों और स्ट्रक्चर को पहले तर्क के रूप में ले जाने वाले कार्यों के साथ एक संरचना घोषित करें (इस सूचक को छद्म)। सी फाइल में कार्यान्वयन और आपने स्वयं को एक छद्म वर्ग बनाया है। पॉलिमॉर्फिज्म और ऐसी चीजें संभव हैं, बस जटिल;) – sanosdole