2010-02-17 5 views
7

अक्सर बदलते डेटा रूपों से निपटने के लिए कुछ संभावित डिज़ाइन क्या हैं?अक्सर बदलते डेटा फॉर्म को संभालने के विकल्प

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

मैं भविष्य में तकनीकी ऋण से बचने की उम्मीद कर इसे संभालने के विभिन्न तरीकों की तलाश में हूं। यहां कुछ विकल्प दिए गए हैं जिनके साथ मैं आया हूं:

  • प्रत्येक संस्करण के लिए एक नया ऑब्जेक्ट, UI और टेबल सेट करें। यह स्पष्ट रूप से सबसे बेवकूफ दृष्टिकोण है।
  • सभी फ़ील्ड को एक ही ऑब्जेक्ट और डीबी टेबल में जोड़ते रहें, लेकिन फॉर्म संस्करण के आधार पर उन्हें दिखाएं/छुपाएं। कुछ बदलावों के बाद यह गड़बड़ हो जाएगा।
  • फॉर्म परिभाषाएं बनाएं, फिर गतिशील रूप से यूआई बनाएं और डेटा को प्रारूप जैसे कुछ शब्दकोश (जैसे JSON/XML या शायद एक दस्तावेज़ उन्मुख डेटाबेस) के रूप में संग्रहीत करें, मुझे लगता है कि यह इस ऐप के दायरे के लिए बहुत जटिल होगा, खासकर यूआई के लिए।

वहाँ अन्य क्या संभावनाएं हैं? क्या किसी को ऐसा करने का अनुभव है? मैं जटिलता से निपटने में मदद के लिए कुछ डिज़ाइन पैटर्न ढूंढ रहा हूं।

+0

वास्तव में एक अच्छा सवाल है। इसका एक क्षेत्र देखने की जरूरत है। निश्चित रूप से एक +1। – Kangkan

उत्तर

0

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

यूआई के लिए, हम प्रत्येक वर्ष के फार्म के लिए एक नया पृष्ठ बनाने की जाएगी। इस स्थिति में गतिशील रूप निर्माण बहुत जटिल है।

2

सबसे पहले, मैं उपरोक्त आपके समाधानों से बात करूंगा और फिर मैं अपना जवाब दूंगा।

  • प्रत्येक संस्करण के लिए एक नया टेबल बना रहा है नया हर साल प्रोग्रामिंग की आवश्यकता के लिए आप के बाद से नहीं गतिशील रूप से नई तालिका को शामिल होने में सक्षम हो सकता है और नई कॉलम आसानी से शामिल होंगे जा रहा है। यह बहुत स्पष्ट लगता है और वास्तव में यह एक बुरा विकल्प बनाता है।
  • जोड़ने के साथ आपके द्वारा उल्लिखित मुद्दों को उसी फ़ॉर्म में कॉलम
    सही हैं। साथ ही, जो भी डेटाबेस आप का उपयोग कर रहे हैं, उस पर अधिकतम कॉलम हैं जो इसे संभाल सकता है और कितने बाइट्स एक पंक्ति में हो सकते हैं। यह एक और चिंता बन सकता है।
  • तीसरा विकल्प मुझे लगता है कि जो आप चाहते हैं उसके करीब है। मैं JSON/XML में नया कॉलम डेटा संग्रहीत नहीं करता, जब तक कि यह गति बढ़ाने के लिए डुप्लिकेशंस के लिए न हो। मुझे लगता है कि इस आपका सबसे अच्छा विकल्प
  • ही एकमात्र विकल्प आप डाटाबेस क्षेत्र में डेटा के सभी भंडारण किया गया था और पार्स करने के लिए XML का उपयोग करने का उल्लेख नहीं किया है। यह विकल्प को क्वेरी और के विरुद्ध रिपोर्ट लिखने के लिए कठिन बना देगा।

यदि मैं यह करना ही था:

  1. पहली तालिका होता कॉलम आईडी (वरीयता प्राप्त), नाम, InputType, CreateDate, ExpirationDate, और CssClass। मैं इसे tbInputs कहूंगा।
  2. दूसरी तालिका मूल्य, और CreateDate ( मुख्य/मूल मेज पर FK के साथ), Entry_ID ( को FK tbInputs.ID के साथ) 5 कॉलम, आईडी, INPUT_ID है होगा। मुख्य/मूल तालिका में एफके आपको से कौन से आइटम संलग्न किए गए थे, यह जानने के लिए आपको किस फॉर्म प्रविष्टि की अनुमति होगी। मैं यह तालिका tbInputValues ​​को कॉल करूंगा।
  3. यदि आप उस बेस तालिका को रखने के लिए पर योजना बनाने की योजना नहीं बनाते हैं, तो मैं निर्माण तालिका, निर्माता आईडी, और form_id को ट्रैक करने वाली एक साधारण तालिका का उपयोग करूंगा।
  4. एक बार जब आप उन्हें प्राप्त कर लेंगे तो आपको केवल एक गतिशील रूप बनाने की आवश्यकता होगी जो वर्तमान में सक्रिय सभी इनपुट को वापस खींचती है और उन्हें प्रदर्शित करती है। मैं <div> जैसे किसी प्रकार के कंटेनर के अंदर सभी गतिशील नियंत्रण रखूंगा क्योंकि यह आपको प्रत्येक तत्व का नाम जानने के बिना उनके माध्यम से लूप करने की अनुमति देगा। फिर tbInputValues ​​इनपुट और उसके मान की आईडी में डालें।
  5. इनपुट जोड़ने या निकालने के लिए एक फॉर्म बनाएं। इसका मतलब यह होगा कि में कोई भी रखरखाव प्रत्येक वर्ष करने के लिए काम नहीं करेगा।

मुझे लगता है कि इस समाधान सबसे अर्थपूर्ण की तरह प्रतीत नहीं हो सकता है, लेकिन अगर सही ढंग से क्रियान्वित मैं इसे अपने सबसे लचीला समाधान है कि तकनीकी ऋण की कम से कम राशि की आवश्यकता है है लगता है।

+0

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

+0

मुझे लगता है कि आप सामान्य रूप से एक जटिल जटिल क्षेत्र में जा रहे हैं। मुझे नहीं पता कि कोई आसान जवाब होगा या नहीं। क्या आपने यह देखने के लिए देखा है कि डाउनलोड करने के लिए मौजूद कोई नियंत्रण है या नहीं, जिससे आपकी समस्या हल हो जाएगी? –

+0

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

2

मुझे लगता है कि तीसरे दृष्टिकोण (XML) सबसे लचीला है। एक साधारण एक्सएमएल संरचना बहुत तेजी से उत्पन्न होती है और इसे आसानी से एक्सएसडी के खिलाफ संस्करणित और मान्य किया जा सकता है।

आप एक मेज एक स्तंभ और वर्ष/संस्करण इस एक्सएमएल पर लागू होता है में XML पकड़े होगा।

उत्पन्न यूआई स्कीमा के आधार पर कोड मूल रूप से एक बुरा विचार है। यदि आपको व्यापक सत्यापन की आवश्यकता नहीं है, तो आप एक साधारण संपादन योग्य तालिका का चयन कर सकते हैं।

आप हर साल एक कस्टम प्रपत्र की जरूरत है, मैं एक नौकरी की गारंटी की तरह के रूप में इसे देख था :-) हालांकि यह संस्करण तंत्र और विस्तार पारदर्शी और स्पष्ट बनाने के लिए महत्वपूर्ण है।

+0

एक्सएमएल संरचना को मान्य करने के लिए एक्सएसडी का उपयोग करने के बारे में एक बहुत अच्छा बिंदु। –

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