हमारे ज्यादातर बड़े अनुप्रयोगों में, हमारे पास आमतौर पर "स्थिरांक" के लिए कुछ ही स्थान होते हैं:
- GUI और आंतरिक प्रतियोगियों के लिए एक वर्ग (टैब पृष्ठ शीर्षक, समूह बॉक्स शीर्षक, गणना कारक, गणना)
- डेटाबेस तालिकाओं और स्तंभों के लिए एक वर्ग (यह भाग उत्पन्न कोड है) प्लस उनके लिए पठनीय नाम (मैन्युअल रूप से सौंपा गया)
- आवेदन संदेशों के लिए एक वर्ग (लॉगिंग, संदेश बॉक्स आदि)
स्थिरांक को आमतौर पर उन वर्गों में अलग-अलग संरचनाओं में विभाजित किया जाता है। हमारे C ++ अनुप्रयोगों में, स्थिरांक केवल .h फ़ाइल में परिभाषित किए जाते हैं और मान .cpp फ़ाइल में दिए जाते हैं।
एक लाभ यह है कि सभी तार आदि एक केंद्रीय स्थान पर हैं और हर कोई जानता है कि उन्हें कहां खोजना है जब कुछ बदलना होगा।
यह विशेष रूप से कुछ परियोजना प्रबंधकों को लगता है जैसे लोग आते हैं और जाते हैं और इस तरह से हर कोई इस तरह की तुच्छ चीजों को बदल सकता है बिना आवेदन के ढांचे में खोदने के लिए।
इसके अलावा, आप एक ही बार में समान ग्रुप बॉक्स / टैब पेज आदि के शीर्षक को आसानी से बदल सकते हैं। एक और पहलू यह है कि आप बस उस कक्षा को प्रिंट कर सकते हैं और एक गैर-प्रोग्रामर को दे सकते हैं, जो यह जांच सके कि क्या कैप्शन सहज हैं, और यदि उपयोगकर्ता को संदेश बहुत विस्तृत या बहुत भ्रामक हैं आदि।
हालाँकि, मुझे कुछ नुकसान दिखाई देते हैं:
- हर एक वर्ग को स्थिरांक वर्गों से कसकर जोड़ा जाता है
- जोड़ने / हटाने / नाम बदलने / एक स्थिरांक को स्थानांतरित करने के लिए कम से कम 90% अनुप्रयोग की पुन: प्राप्ति की आवश्यकता होती है (नोट: मूल्य बदलना, कम से कम C ++ के लिए)। 1500 सी के साथ हमारी सी ++ परियोजनाओं में से, इसका मतलब है कि लगभग 7 मिनट का संकलन समय (प्री-कंपाइल किए गए हेडफ़ोन का उपयोग करना, उनके बिना यह लगभग 50 मिनट है) प्लस कुछ स्थिर पुस्तकालयों के खिलाफ लिंक करने के 10 मिनट के आसपास।
- विजुअल स्टूडियो कम्पाइलर के माध्यम से एक गति अनुकूलित रिलीज का निर्माण करने में 3 घंटे तक का समय लगता है। मुझे नहीं पता कि वर्ग संबंधों की विशाल राशि स्रोत है या हो सकती है।
- आप अस्थायी रूप से हार्ड-कोडिंग स्ट्रिंग्स को कोड में सीधे संचालित करते हैं क्योंकि आप बहुत जल्दी कुछ परीक्षण करना चाहते हैं और उस परीक्षण के लिए केवल 15 मिनट इंतजार नहीं करना चाहते हैं (और शायद हर बाद एक)। हर कोई जानता है कि "मैं बाद में ठीक कर दूंगा" - क्या होता है।
- किसी अन्य परियोजना में एक कक्षा का पुन: उपयोग करना हमेशा इतना आसान नहीं होता है (मुख्यतः अन्य तंग युग्मन के कारण, लेकिन स्थिरांक संभालना इतना आसान नहीं होता है।)
आप इस तरह से स्थिरांक कहाँ संग्रहीत करेंगे? इसके अलावा आप अपने प्रोजेक्ट मैनेजर को यह समझाने के लिए क्या तर्क लाएंगे कि बेहतर अवधारणाएँ हैं जो ऊपर सूचीबद्ध लाभों का अनुपालन करती हैं?
सी ++ - विशिष्ट या स्वतंत्र उत्तर देने के लिए स्वतंत्र महसूस करें।
पुनश्च: मुझे पता है कि यह प्रश्न व्यक्तिपरक है, लेकिन मैं ईमानदारी से इस तरह के प्रश्न के लिए इस साइट से बेहतर कोई स्थान नहीं जानता।
इस प्रोजेक्ट पर अपडेट करें
मेरे पास संकलन समय पर समाचार है:
कालेब और gbjbaanb के पोस्ट के बाद, मैंने अपने कॉन्स्टेंट फ़ाइल को कई अन्य फाइलों में विभाजित किया जब मेरे पास समय था। मैंने अंततः अपनी परियोजना को कई पुस्तकालयों में विभाजित किया जो अब बहुत आसान था। इसे रिलीज़ मोड में संकलित करने से पता चला कि ऑटो-जनरेटेड फ़ाइल में डेटाबेस परिभाषाएँ (तालिका, स्तंभ नाम और अधिक - 8000 से अधिक प्रतीक हैं) और कुछ हैश के निर्माण में रिलीज़ मोड में विशाल संकलन समय होता है।
लाइब्रेरी के लिए MSVC के ऑप्टिमाइज़र को निष्क्रिय करना जिसमें DB कॉन्स्टेंट शामिल हैं, अब हमें आपके प्रोजेक्ट के कुल संकलन समय (कई एप्लिकेशन) को रिलीज़ मोड में 8 घंटे से लेकर एक घंटे से कम करने की अनुमति देता है!
हमें अभी तक यह पता नहीं चल पाया है कि एमएसवीसी के पास इन फाइलों का अनुकूलन करने में इतना कठिन समय क्यों है, लेकिन अब इस बदलाव से बहुत अधिक दबाव में राहत मिलती है क्योंकि अब हमें केवल रात के निर्माण पर निर्भर रहना होगा।
यह तथ्य - और अन्य लाभ, जैसे कम तंग युग्मन, बेहतर पुन: प्रयोज्य आदि - यह भी दिखाया कि "स्थिरांक" को विभाजित करने में समय बिताना इतना बुरा विचार नहीं था; ;-)
Update2
चूँकि यह प्रश्न अभी भी कुछ ध्यान देता है:
यहाँ मैं पिछले कुछ वर्षों में कर रहा हूँ:
हर स्थिरांक, चर इत्यादि को उस दायरे में रखें जो इसके लिए प्रासंगिक हो: यदि आप केवल किसी एकल विधि में एक स्थिरांक का उपयोग करते हैं, तो उस विधि में इसे परिभाषित करना ठीक है। यदि कोई एकल वर्ग इसमें रुचि रखता है, तो इसे उस वर्ग के निजी कार्यान्वयन विवरण के रूप में छोड़ दें। नाम स्थान, मॉड्यूल, प्रोजेक्ट, कंपनी क्षेत्र के लिए भी यही लागू होता है। मैं सहायक कार्यों और इसी तरह के लिए समान पैटर्न का उपयोग करता हूं। (यदि आप सार्वजनिक ढांचा विकसित करते हैं तो यह 100% लागू नहीं हो सकता है।)
ऐसा करने से एक हद तक पुन: प्रयोज्यता, परीक्षणशीलता और स्थिरता बढ़ जाती है, जहां आप न केवल कम समय संकलन (कम से कम C ++) में खर्च करते हैं, बल्कि बगफिक्सिंग पर भी कम समय देते हैं, जो आपको वास्तव में नई सुविधाओं को विकसित करने के लिए अधिक समय देता है। इसी समय, इन सुविधाओं को विकसित करना तेजी से आगे बढ़ेगा क्योंकि आप अधिक आसानी से अधिक कोड का पुन: उपयोग कर सकते हैं। यह केंद्रीय स्थिरांक फ़ाइल के किसी परिमाण के कारण हो सकता है।
यदि आप अधिक जानना चाहते हैं, तो विशेष रूप से इंटरफ़ेस अलगाव सिद्धांत और एकल जिम्मेदारी सिद्धांत पर एक नज़र डालें ।
यदि आप सहमत हैं, तो इस अद्यतन के बाद से कालेब के उत्तर को बढ़ा दें, जो मूल रूप से उनके द्वारा कही गई बातों पर आधारित है।