2011-11-17 16 views
5

मैं अक्सर यह करने के लिए सही तरीके के बारे सोच रहा था:स्टोर श्रेणीबद्ध कॉन्स्ट डेटा

उदाहरण के लिए, मेरे कार्यक्रम में मैं करीब 100 स्थिरांक (या enums) है कि कुछ गणना में उपयोग किया जाता है। उन्हें प्राथमिक रूप से एक स्थान पर संग्रहीत किया जाना चाहिए। वे, पदानुक्रम बांटा जा सकता है उदाहरण के लिए:

System3/Rules/Rule7/ParameterXY/MaxAverageValue 

स्वाभाविक रूप से, मैं जबकि कोडिंग उन मूल्यों को सुलभ होना चाहता हूँ, इसलिए उन्हें ressource किसी तरह का में भंडारण वास्तव में एक विकल्प नहीं है।

जहां तक ​​मेरा बता सकते हैं, इस के साथ किया जा सकता है:

  • बहुत लंबे निरंतर नाम
  • नेस्टिंग कक्षाएं
  • नामस्थान

नाम का उपयोग काफी बदसूरत है, और यह है वास्तव में अच्छी तरह से बनाए रखने योग्य नहीं है। मुझे घोंसले के वर्गों को ऐसा करने का एक अच्छा तरीका मिल जाता है, लेकिन कुछ स्टाइलकोप/एफएक्सकोप नियम इसे मना करते हैं, इसलिए यह किसी भी तरह से "खराब" होना चाहिए। आखिरकार, मुझे नामस्थान का उपयोग करके सुझाए गए विकल्प मिलते हैं, न कि बहुत अच्छे हैं। इम्हो यह फ़ोल्डरों और फ़ाइलों के लोगों को बनाता है जिनमें प्रत्येक में लगभग कुछ भी नहीं होता है। और मुझे पसंद नहीं है जब 50 सब-नेमस्पेस असेंबली परावर्तक में पॉप अप करते हैं।

तो .. आप इस तरह के कार्य कैसे करते हैं? आप क्या सुझाव देंगे?

+1

मैं नामस्थानों का सुझाव दूंगा। घोंसले वर्गों और लंबे स्थिरांक नाम से बचें। –

+0

पढ़ने के लिए मुश्किल है एमवीसी स्थिर कॉन्स सार्वजनिक क्षेत्रों के साथ जेनरेट कक्षाओं कक्षाओं का उपयोग करता है IIRC – sehe

+0

@StevenMuhr: आप क्यों कहते हैं कि नेस्टेड कक्षाओं को ब्याज से पढ़ना मुश्किल है? मेरे सिर के ऊपर से उन्होंने मुझे उस समाधान के रूप में मारा जो मैं जाऊंगा। मतलब है कि आप अपने सभी स्थिरांक को एक फ़ाइल में रख सकते हैं और आपको पदानुक्रमों को नामस्थानों के समान ही मिलता है। – Chris

उत्तर

4

बहुत लंबे निरंतर नाम

यह सकल की तरह है, लेकिन कम से कम यह पता लगाने योग्य है। आपका पूरा कोड उसी स्थान पर रहेगा ताकि आपको इसे खोजने में कोई समस्या न हो।

मैं घोंसले कक्षाओं यह करने के लिए एक अच्छा तरीका मिल जाए, लेकिन कुछ StyleCop/FxCop नियम है कि न करे, तो यह क्योंकि स्वचालित "बुरा" होना चाहिए किसी तरह

एक कारण यह है बुरा है में कोड जनरेशन/कोड निरीक्षण उपकरण के साथ काम करना मुश्किल है। एक और कारण यह है कि इंटेलिसेंस के साथ इन्हें खोजना मुश्किल है।

यह सबसे बुरा कारण यह बुरा है क्योंकि लेआउट के लिए एक ऑब्जेक्ट-उन्मुख निर्भरता भावना में घोंसला वाले वर्ग को दृढ़ता से जोड़ा जाना चाहिए। कुछ दुर्लभ मामलों में (उदा। Enumerator classes) यह समझ में नहीं आता है। आपके मामले में यह भी समझ में नहीं आता है क्योंकि आपके वर्गों में वास्तव में कोई व्यवहार या वस्तु अभिविन्यास नहीं है - वे केवल स्थिरांक का पदानुक्रम हैं।

नेमस्पेस

समस्या आप वर्णित के लिए, यह सबसे अच्छा तरीका है इसे संभाल करने के लिए है। आपको प्रति-स्तर कम से कम अव्यवस्था मिलती है, और टाइपिंग करते समय आपको इंटेलिजेंस मिलता है ताकि आप देख सकें कि पदानुक्रम के माध्यम से उतरते समय आप क्या कर रहे हैं।

यह IMHO फ़ोल्डर और फ़ाइलों कि प्रत्येक लगभग कुछ भी नहीं

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

एक और सुझाव

आप डोमेन-विशिष्ट वस्तुओं है कि इन स्थिरांक बजाय पर संबंधित है? जैसे System3/Rules/Rule7 कक्षा से संबंधित कोई तर्क है? क्या यह किसी प्रकार का वास्तविक व्यापार नियम नहीं है जिसे आपको अपनी कक्षा के साथ जोड़ना चाहिए?

यदि आप अपना कोड व्यवस्थित कर सकते हैं ताकि आपके पास a thicker domain model हो, तो आपके स्थिरांक रखने के लिए सबसे तार्किक स्थान उन वर्गों पर है जो संबंधित डोमेन तर्क को जोड़ते हैं।

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

+0

उस अंतिम सुझाव के लिए धन्यवाद, वास्तव में जाने का तरीका लगता है। एकमात्र कमी यह है कि यह किसी विशिष्ट स्थिरता को खोजने के लिए कोड को नहीं जानते किसी के लिए कठिन बनाता है। लेकिन इसके लिए एक सुरुचिपूर्ण समाधान है: कॉन्स्टर्स या कॉन्फ़िगरेशन फ़ाइलों (या यहां तक ​​कि कुछ और) और गुण (उन मानों को प्राप्त करना) कोस्ट के बजाय। :) – Efrain

0

वैसे मैं ऐसा करता हूं कि कॉन्स्टेंट नामक एक सीलबंद फ़ाइल हो।

तो

public sealed class Constants 
{ 

    //for e.g. 
    //Sessions 
    public const string APPSESSIONKEY = "AppType"; 

} 

से मैं यह मेरा परियोजना के बाकी हिस्सों में इस्तेमाल करते हैं और महत्व यहाँ के रूप में यह आपको याद और समझ बनाने के लिए जब आप इसकी आवश्यकता मदद मिलेगी क्या आप इसे नाम नहीं है।

इसे अपने कोड में कॉल करके।

Constants.AppSessionKey 

तुम भी

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

1

कई तरीकों से प्रत्येक निरंतर पुन: उपयोग कितनी बार उपयोग किया जाता है? आप अपने स्थिरांक को पुनर्गठित करने पर विचार कर सकते हैं। यदि आप अभी भी बड़ी संख्या में स्थिरांक के साथ स्वयं को पाते हैं, तो उन्हें केवल स्थिर-योग्य गुणों के साथ स्थिर वर्ग में डालने का प्रयास करें।

यदि आपको बस एक ही स्थान पर देखने के लिए एक अच्छी जगह की आवश्यकता है, तो आप उन्हें app.config फ़ाइल में संग्रहीत करने पर भी देख सकते हैं और आप उन्हें ऐपसेटिंग और कॉन्फ़िगरेशन प्रबंधक श्रेणी के माध्यम से एक्सेस कर सकते हैं।

0

हम कस्टम टी 4 टेम्पलेट के साथ संसाधन फ़ाइलों का उपयोग करते हैं जो मूल्यों के लिए केवल पढ़ने वाले स्ट्रिंग फ़ील्ड के साथ एक स्थिर श्रेणी पदानुक्रम उत्पन्न करता है।

हमारी संसाधन फ़ाइल में कुंजी '।' से अलग हैं। पदानुक्रम बनाने के लिए।

हमारे पास एक वर्ग पदानुक्रम में संकलित अलग संसाधन फाइलें हो सकती हैं।

मुझे पता है कि नेस्टेड कक्षाओं की सिफारिश नहीं की जाती है, लेकिन मेरी राय में, इस तरह की स्थिति के लिए यह सबसे अच्छा समाधान है।

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