2015-10-05 6 views
7

मैं ऐसे एप्लिकेशन पर काम कर रहा हूं जहां गुण फाइलों में परिभाषित कुछ कॉन्फ़िगरेशन मान हैं जिनके मान या मान्य श्रेणियां डेटाबेस में संग्रहीत डेटा पर निर्भर करती हैं।डेटाबेस में डेटा के साथ संपत्ति-विरोधी मूल्यों को जोड़ना एक विरोधी पैटर्न है?

यह कुछ कारणों से गलत लगता है लेकिन मैं इस के लिए एक नाम खोजने के लिए संघर्ष कर रहा हूं या वास्तव में कोई प्रकाशित लेख जो सुझाव दे सकता है कि यह बुरा अभ्यास है। क्या कोई सलाह दे सकता है?

उत्तर

1

आपके दर्द का नाम है, और यह युग्मन है।

संपत्ति फ़ाइल - जो मैं एकत्र करता हूं वह सर्वर के कॉन्फ़िगरेशन का हिस्सा है या एप्लिकेशन के साथ बंडल किया गया है - डेटाबेस के साथ मिलकर है। डेटाबेस में परिवर्तन संपत्ति फ़ाइल में फिसल जाएगा।

यह सबसे खराब प्रकार का युग्मन नहीं है - नरक का चक्र Pathological/Content युग्मन है - लेकिन यह अभी भी युग्मन है।

+0

धन्यवाद - सहमत हैं। तो एक नाम के साथ आने की कोशिश करने के साथ जारी रखने के लिए, शायद यह *** "द्रव/कठोर डेटा युग्मन" *** की तरह कुछ होता है? –

+1

मुझे लगता है कि इस युग्मन का सबसे बुरा हिस्सा यह है कि डेटा दो डेटा स्टोर्स में निहित है जो स्वतंत्र होना चाहिए। यह "सामान्य/वैश्विक डेटा" युग्मन से निश्चित रूप से खराब है। यह जीभ को बंद नहीं करता है, लेकिन शायद यह "क्रॉस-डेटा स्टोर" युग्मन है? –

1

15 फरवरी, 2016 को, स्टैक ओवरव्लो उपयोगकर्ता "ज़ीरोबैंडविड्थ" ने कहा कि डेटाबेस कॉन्फ़िगरेशन से प्राप्त परिस्थिति संबंधी सीमाओं के अनुसार आपकी कॉन्फ़िगरेशन सेटिंग्स को सत्यापित करना एक बुरा विचार है। वहां, अब एक पोस्ट है जहां कोई कहता है कि यह एक बुरा विचार है। ओ। ~

गंभीरता से, हालांकि, किसी भी समय आप बाहरी परिस्थितियों, खासकर जब उन मानकों की व्युत्पत्ति एक नेटवर्क या डेटाबेस से संबंध के रूप में के रूप में नाजुक कुछ पर निर्भर करता है के आधार पर इनपुट सत्यापन करने के लिए कोशिश कर रहे हैं, तो आप एक बुरा समय होने जा रहा है।

अगर हमें इस पैटर्न के लिए अधिक आधिकारिक महसूस करने के लिए एक नाम का आविष्कार करना है, तो "अविश्वसनीय मौलिक निर्भरता" के बारे में कैसे। ऐसा लगता है कि एक सुखद सुगंधित अर्थ है, है ना?^_^

+0

अच्छा विचार किसी नाम के साथ आने का प्रयास कर रहा है, हालांकि यह सुनिश्चित नहीं है कि आप जिस जीभ के साथ आए थे, उतनी आसानी से शब्दों [यहां] (https://en.wikipedia.org/wiki/Anti- पैटर्न)। मुझे स्ट्राइक करता है कि "हार्ड कोडिंग" के साथ कुछ समानताएं हैं क्योंकि गुण फ़ाइलों में डेटा आमतौर पर डेटाबेस में डेटा की तुलना में कम सुलभ और लचीला होने की दिशा में लचीला होता है। (हार्ड कोडिंग के समान तरीके से पैच या पुनर्वितरण जैसे अधिक कठोर तरीकों की आवश्यकता होती है)। शायद "कठोर डेटा" कठोरता के स्तर को पकड़ता है? –

1

कुछ विरोधी पैटर्न हैं जो ध्यान में आते हैं। सबसे उपयुक्त एक शायद सॉफ्टकोडिंग (हार्डकोडिंग मानों के विपरीत) होगा। कठोर कोडित मूल्यों से बचें और "जादू संख्या" आम तौर पर एक अच्छी बात है, लेकिन चरम पर नहीं ले जाती है। Wikipedia entry से:

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

जब से तुम प्रकाशित लेख के लिए कहा, softcoding बारे में अधिक जानकारी The Daily WTF, जहां एलेक्स के रूप में परिभाषित softcoding में पाया जा सकता ...

को हटाने "चीजें हैं जो स्रोत कोड में होना चाहिए" के अभ्यास स्रोत कोड से और उन्हें कुछ बाहरी संसाधनों में रखकर।

से आप क्या वर्णन किया है, इन मूल्यों को संग्रहीत किया जाना चाहिए (या संभवतः गणना की) स्रोत कोड में, या भी डेटाबेस जहां मूल्यों वे पर निर्भर जमा हो जाती है, बाहरी संपत्ति फाइलों में नहीं है। तो हाँ, मैं इस बात से सहमत हूं कि वास्तव में यहां कुछ "डिजाइन गंध" है।

कुछ हद तक, आप तर्क दे सकते हैं कि यह Cargo cult programming लागू होने का मामला है।

कार्गो पंथ प्रोग्रामिंग भी एक डिज़ाइन पैटर्न को लागू करने या कि डिजाइन सिद्धांत के पीछे कारणों को समझे बिना आँख बंद करके शैली कोडिंग के परिणाम देख सकते हैं।

Golden Hammer लागू करने के समान ही नहीं है, लेकिन कुछ हद तक सिद्धांत में समान है।

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

0

यह देखने की मेरी बात है लेकिन ... चलो इसे आसान करते हैं।

कोड में एक बहुत ही डिफ़ॉल्ट मान होना चाहिए जो प्रत्येक मौजूदा/प्रयुक्त संपत्ति के लिए "सुरक्षित मोड" में कोड चलाने के लिए ठीक काम करता है।

ParamaterService.init(); //whatever it's need, can be injected for DB 
Integer myImportantValue = ParameterService.getMyImportantValue(); 

public final class ParameterService { 
    private static Integer MY_IMPORTANT_VALUE_DEFAULT = 10; 

    public Integer getMyImportantValue() { 
     Integer value = getFromDb("MY_IMPORTANT_VALUE"); 
     if (value != null) { 
      return value; 
     } 
     return MY_IMPORTANT_VALUE_DEFAULT; 
    } 
} 

तुम्हारा "स्थानीय लोगों" गुण विन्यास शामिल हैं:
या यह .properties फ़ाइल के रूप में स्थानीय ressource से लोड किया जा सकता ...

एक तरह से संपत्ति प्राप्त करने के लिए कहीं सुरक्षित और नियंत्रण में केंद्रीकृत करने के लिए है जो बाहरी स्रोत से नहीं आ सकता है (अच्छी तरह से ज्ञात उदाहरण डीबी कनेक्शन जानकारी है)।

अन्य सभी किसी भी बाहरी डेटाबेस से आते हैं।
और आपके पास संदर्भ के आधार पर differents डेटाबेस हो सकते हैं (उदाहरण: अंतरराष्ट्रीय कंपनियों के लिए देश)।
चारों ओर मोड़ने और स्रोतों को मिश्रण करने की आवश्यकता नहीं है।
यदि आपको किसी मान की सामग्री को सत्यापित/जोर देने की आवश्यकता है, तो यह अभी भी संभव है, getMyImportantValue के पीछे कोड आपके विवेकानुसार है।

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