2013-02-24 16 views
16

यह मुझे बताया गया है (और मैंने यह कथन कुछ अन्य स्थानों में देखा है) कि अन्य कक्षाओं में उनका उपयोग करने के लिए जावा में एक अलग वर्ग में अपने स्थिरांक को स्टोर करने की अनुशंसा नहीं की जाती है। लेकिन मैंने कहीं भी नहीं देखा है ऐसा क्यों है। मुझे अपने स्वयं के इंटरफ़ेस/कक्षा में उन्हें स्टोर क्यों नहीं करना चाहिए?एक अलग वर्ग में स्थिरांक स्टोर करने की सिफारिश क्यों नहीं की जाती है?


मैं सी से जावा के लिए और सी में मैं सिर्फ एक .h फ़ाइल मैं कहाँ के साथ #define

+4

क्या हम यहां स्थिरांक या बाधाओं के बारे में बात कर रहे हैं, और यदि बाद वाले, तो आप किस बाधाओं का मतलब रखते हैं? –

+1

एक मिनट रुको ... क्या आप * स्थिरांक * या * बाधाओं का जिक्र कर रहे हैं *? –

+0

क्षमा करें, मैंने इसे बुरी तरह लिखा है, धन्यवाद –

उत्तर

22

स्टाइलिस्ट कारणों से समर्पित फ़ाइल में स्थिरांक फंसे हुए हैं। स्थिरांक को समर्पित कक्षा होने से डेवलपर्स को असंबद्ध (अनियंत्रित?) की बढ़ती संख्या जोड़ने के लिए प्रोत्साहित किया जा सकता है जो एक फ़ाइल में स्थिर होता है जो धीरे-धीरे नियंत्रण से बाहर हो जाता है।

इसके विपरीत, कक्षाओं से जुड़े स्थिरांक होने से वे एक अधिक स्केलेबल और पठनीय डिजाइन हैं।

+0

"एकल" सापेक्ष है। प्रति पैकेज या यूओआर उचित है। पूरे कोड बेस के अनुसार, शायद नहीं। और निश्चित रूप से Google के सर्वर पर संग्रहीत एक केंद्रीय कॉन्फ़िगर फ़ाइल नहीं होनी चाहिए जो शेष दुनिया के जावा डेवलपर्स वेब इंटरफ़ेस के माध्यम से बनाए रखें। – djechlin

+0

क्या प्रत्येक पैकेज के लिए एक ही कक्षा में डाले जाने पर दस्तावेज होना ज्यादा आसान नहीं होगा? भले ही डेवलपर्स बहुत अधिक स्थिरांक जोड़ते हैं, फिर भी वे दस्तावेज़ बनाते समय उनसे छुटकारा पायेंगे। अभी भी अलग-अलग वर्गों में स्थिरांक को शामिल करने के लिए मुझे बेहतर लगता है या यहां तक ​​कि उन्हें एक वर्ग में भी शामिल किया गया है और फिर भी दस्तावेज बनाते समय बेकार लोगों से छुटकारा पा रहा है। –

+1

@ बुजान्का मिहाई व्यक्तिगत रूप से, मुझे नहीं लगता। मैं उन वर्गों से जुड़े स्थिरांक रखता हूं जिनके वे "संबंधित हैं; मुझे लगता है कि पढ़ने के लिए आसान (प्रत्येक वर्ग में कुछ निजी स्थिरांक, कुछ पैकेज-निजी वाले आदि हो सकते हैं)। यदि उपयुक्त हो, तो मैं एक enum में संबंधित स्थिरांक इकट्ठा करता हूं। –

-5

जारी करना स्थिरांक परिभाषित है कि वे अपने स्रोत कोड के बाहर पूरी तरह से रहने वाले किया जाना चाहिए होगा आया था। आपको अपाचे कॉमन्स कॉन्फ़िगर जैसे कुछ का उपयोग करना चाहिए, या कम से कम .properties फ़ाइल से लोड करना चाहिए।

मैं यह भी ध्यान दूंगा कि मैं एक उचित दायरे के संबंध में "सिंगल" की व्याख्या कर रहा हूं। उदाहरण के लिए, संशोधित करने के लिए अनुरोध फ़ॉर्म के साथ Google के सर्वर पर संग्रहीत सभी जावा डेवलपर्स के लिए एक कॉन्फ़िगर फ़ाइल नहीं होनी चाहिए। शायद आपके पूरे कोड बेस के लिए नहीं किया जाना चाहिए; हालांकि, प्रति यूओआर या पैकेज एक उचित दायरा है, और मैं अभ्यास में उपयोग करता हूं।

+2

फिर से .. ओपी पूछ रहा है * क्यों * उन्हें समर्पित कक्षा में संग्रहित नहीं किया जाना चाहिए। –

+0

नहीं, उन्हें स्रोत कोड के बाहर नहीं रहना चाहिए, उदाहरण के लिए, पूरे पैकेज में कक्षाएं होती हैं जो इसका उपयोग करती हैं, लेकिन कोई बाहरी निर्भरता –

+0

@ डंकनजोन्स नहीं है "मुझे अपने इंटरफ़ेस/कक्षा?" क्योंकि वे किसी भी इंटरफ़ेस/कक्षा में नहीं होना चाहिए। – djechlin

4

तो आप एक इंजीनियर हो सकते हैं और एक स्थिर विकल्प के रूप में स्थिरांक और उनके स्थान माप सकते हैं। यह शानदार और बढ़िया है जब आप प्रदर्शन महत्वपूर्ण सिस्टम या शांत छोटे स्निपेट पर काम करते हैं। एक बार आपका आवेदन बढ़ने के बाद, व्यापार आवश्यकताओं और अंत उपयोगकर्ता की आवश्यकताओं को समझने के लिए कठिन और कठिन हो जाता है।

तो शैली के बारे में सोचने के बजाय - अलग वर्ग, गुण फ़ाइल या कक्षा के अंदर घोंसला - मैं domain driven design का पालन करता हूं - यदि स्थिरांक का सेट विशेष रूप से एक विशिष्ट वर्ग (इकाई) से संबंधित है, तो स्थिरांक घोंसला; यदि अवधारणा आपके डोमेन मॉडल में से एक से अधिक इकाइयों को छूती है, तो इसे एक अलग इकाई बनाने के लिए स्वतंत्र महसूस करें।

और कृपया याद रखें, कि Java 5 के बाद से आपके पास enums है।

+0

सलाह के लिए धन्यवाद, लेकिन फिर भी, आप वास्तव में मुझे नहीं बताते हैं कि मुझे स्थिरता स्टोर करने के लिए एक अलग वर्ग का उपयोग क्यों नहीं करना चाहिए/ –

+0

अच्छी पकड़, आपकी सलाह के अनुसार संपादित किया जाना चाहिए। –

+0

मुझे आपके 'सार्वजनिक' स्थिरांक का ट्रैक रखने में कठिनाई होती है, जो अधिक कक्षाओं में उपयोग की जाती है यदि स्थिरांक कई वर्गों को फैलाते हैं। बेशक, मैं सहमत हूं कि 'निजी' स्थिरांक अपनी कक्षाओं में रहना चाहिए –

1

एक अलग स्थिरांक वर्ग वस्तु उन्मुख डिजाइन नहीं है। ओओ में, एक वर्ग (या इंटरफ़ेस) अनुबंध का प्रतिनिधित्व करता है, और एक वर्ग जिसमें केवल स्थिरांक शामिल हैं, किसी भी अनुबंध को परिभाषित नहीं करता है।

एक और वस्तु-उन्मुख विचार यह है कि एक अलग स्थिरांक वर्ग विरासत का दुरुपयोग करने के लिए प्रोत्साहित करता है। विरासत को इंगित करना है कि एक वर्ग पूरी तरह से किसी अन्य वर्ग या इंटरफेस द्वारा परिभाषित अनुबंध का पालन करता है। कार्यक्षमता या स्थिरांक साझा करने के लिए विरासत का उपयोग नहीं किया जाना चाहिए; public विधियों और फ़ील्ड के लिए हैं। इस प्रकार, यह कोड गलत है:

class SomeApplicationClass 
implements ScrollPaneConstants // Incorrect, import ScrollPaneConstants instead 
संबंधित मुद्दे

 संबंधित मुद्दे