कई कार्यों के साथ एक बड़ी परियोजना में एक स्रोत फ़ाइल है जो अत्यंत प्रदर्शन के प्रति संवेदनशील हैं (प्रति सेकंड लाखों बार कहा जाता है)। वास्तव में, पिछले अनुरक्षक ने किसी फ़ंक्शन की 12 प्रतियों को लिखने का फैसला किया है, जो कि एक ही फ़ंक्शन में सशर्तों की जांच करने में लगने वाले समय को बचाने के लिए प्रत्येक को बहुत अलग-अलग तरीके से लिखते हैं।
दुर्भाग्य से, इसका मतलब कोड को बनाए रखने के लिए एक PITA है। मैं सभी डुप्लिकेट कोड निकालना चाहूंगा और सिर्फ एक टेम्पलेट लिखूंगा। हालाँकि, भाषा, जावा, टेम्पलेट्स का समर्थन नहीं करती है, और मुझे यकीन नहीं है कि इसके लिए जेनेरिक उपयुक्त हैं।
मेरी वर्तमान योजना एक फाइल के बजाय लिखने की है जो फ़ंक्शन की 12 प्रतियां (एक-एक-केवल-टेम्पलेट टेम्पलेट, व्यावहारिक रूप से) उत्पन्न करती है। मैं निश्चित रूप से इस बात के लिए प्रचुर विवरण प्रदान करूंगा कि फाइल को प्रोग्रामेटिक रूप से क्यों जनरेट किया जाना चाहिए।
मेरी चिंता यह है कि इससे भविष्य के रखवालों को भ्रम होगा, और शायद बुरा बग का परिचय दें, अगर वे इसे संशोधित करने के बाद फ़ाइल को पुन: उत्पन्न करना भूल जाते हैं, या (इससे भी बदतर) यदि वे प्रोग्राम-जनरेटेड फ़ाइल के बजाय संशोधित करते हैं। दुर्भाग्य से, सी ++ में पूरी बात को फिर से लिखने के लिए, मुझे इसे ठीक करने का कोई रास्ता नहीं दिख रहा है।
क्या इस दृष्टिकोण के लाभ नुकसान से आगे निकल जाते हैं? क्या मुझे इसके बजाय:
- प्रदर्शन को हिट करें और एकल, बनाए रखने योग्य फ़ंक्शन का उपयोग करें।
- फ़ंक्शन को 12 बार डुप्लिकेट क्यों किया जाना चाहिए, इसके लिए स्पष्टीकरण जोड़ें, और विनम्रता से रखरखाव का बोझ उठाएं।
- टेम्प्लेट के रूप में जेनरिक का उपयोग करने का प्रयास (वे शायद उस तरह से काम नहीं करते हैं)।
- किसी एकल फ़ंक्शन पर कोड को इतना प्रदर्शन-निर्भर बनाने के लिए पुराने अनुरक्षक पर चिल्लाएं।
- प्रदर्शन और स्थिरता बनाए रखने के लिए अन्य विधि?
PS परियोजना के ख़राब डिज़ाइन के कारण, फ़ंक्शन को रूपरेखा देना मुश्किल है ... हालाँकि, पूर्व अनुचर ने मुझे आश्वस्त किया है कि प्रदर्शन हिट अस्वीकार्य है। मैं यह मानता हूं कि वह 5% से अधिक है, हालांकि यह मेरी ओर से पूर्ण अनुमान है।
शायद मुझे थोड़ा विस्तार करना चाहिए। 12 प्रतियां एक समान कार्य करती हैं, लेकिन मिनट के अंतर हैं। मतभेद पूरे समारोह में विभिन्न स्थानों पर हैं, इसलिए दुर्भाग्य से कई, कई, सशर्त बयान हैं। प्रभावी रूप से ऑपरेशन के 6 "मोड" हैं, और ऑपरेशन के 2 "प्रतिमान" (स्वयं द्वारा बनाए गए शब्द)। फ़ंक्शन का उपयोग करने के लिए, कोई "मोड" और ऑपरेशन के "प्रतिमान" को निर्दिष्ट करता है। यह कभी गतिशील नहीं है; कोड का प्रत्येक टुकड़ा बिल्कुल एक मोड और प्रतिमान का उपयोग करता है। सभी 12 मोड-प्रतिमान जोड़े अनुप्रयोग में कहीं न कहीं उपयोग किए जाते हैं। कार्यों को उपयुक्त रूप से func1 को func12 कहा जाता है, यहां तक कि संख्याओं के साथ दूसरे प्रतिमान और विषम संख्याओं को पहले प्रतिमान का प्रतिनिधित्व करते हैं।
मुझे पता है कि यह केवल सबसे खराब डिजाइन के बारे में है अगर रखरखाव लक्ष्य है। लेकिन यह "काफी तेज" लगता है, और इस कोड को थोड़ी देर के लिए किसी भी बदलाव की आवश्यकता नहीं है ... यह भी ध्यान देने योग्य है कि मूल फ़ंक्शन को हटाया नहीं गया है (हालांकि यह मृत कोड है जहां तक मैं बता सकता हूं) , इसलिए रीफैक्टरिंग सरल होगी।
Makefile
" या (जो भी सिस्टम आप उपयोग करते हैं) से बना रहे हैं और इसे सही तरीके से समाप्त संकलन हटा दें । इस तरह से उनके पास गलत स्रोत फ़ाइल को संशोधित करने का मौका नहीं है।