दोहराव कोड को कैसे व्यवस्थित करें?


11

मेरी टीम बहुत सारे एक-बंद वेब फॉर्म बनाती है। इनमें से अधिकांश फॉर्म सिर्फ एक ई-मेल भेजते हैं, और कुछ एक साधारण डेटाबेस लिखते हैं।

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

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

  • क्या मुझे इसमें हमारी सभी फॉर्म परियोजनाओं के साथ एक समाधान फ़ाइल बनाने की कोशिश करनी चाहिए? बहुत सारे प्लंबिंग कोड नहीं हैं, हालांकि मैं ई-मेल फॉर्मेटिंग और इस तरह की मदद करने के लिए कुछ सहायक कक्षाएं बना सकता हूं। यह सीएसएस, जावास्क्रिप्ट, नियंत्रण और छवियों को परियोजनाओं में साझा करने में सक्षम होने के लिए बहुत उपयोगी होगा।
  • यह देखते हुए कि हम एक Microsoft दुकान हैं, क्या इस विशिष्ट परिदृश्य के लिए वेबफॉर्म पर MVC जैसी किसी चीज़ के साथ जाने के लिए कोई ठोस लाभ हैं? मुझे समग्र रूप से एमवीसी की अवधारणा पर बेचा जाता है, लेकिन क्या इससे मुझे 15-फ़ील्ड डेटा संग्रह फ़ॉर्म को अधिक कुशलता से खींचने में मदद मिलेगी यदि वह सभी फ़ॉर्म ई-मेल भेजते हैं? जिस रूप में मुझे यह सोचने में मिला, उसमें उपयोगकर्ता की प्रतिक्रियाओं के आधार पर फ़ील्ड को दिखाने और छिपाने के लिए बनाया गया एक अच्छा तर्क था और ऐसा लगता है कि यह MVC और jQuery का उपयोग करने के लिए कम कुशल होता।

2
यह क्या मेटा से यहाँ माइग्रेट किया गया था? SO पर होना चाहिए।
जोश के

1
@ जोश स्टैक ओवरफ्लो सीधे कोड में विशिष्ट समस्याओं से संबंधित प्रश्नों के लिए है। प्रोग्राम और वर्कफ़्लो डिज़ाइन यहाँ विषय पर है।

@ मार्क: यह बहुत व्यक्तिपरक नहीं लगता, क्योंकि इसमें आसानी से दिए गए n आदर्श "सर्वश्रेष्ठ अभ्यास" समाधान होगा। मैं एक एमएस आदमी नहीं हूं, इसलिए मुझे नहीं पता कि जटिलता क्या है, हालांकि मुझे लगता है कि यह एक गैर व्यक्तिपरक तरीके से सबसे अच्छा जवाब होगा।
जोश के

माना। यह SO पर बंद हो जाएगा।
वाल्टर

1
यह पहले से ही इतने पर कहा गया है यहाँ
ChrisF

जवाबों:


3

परीक्षणों के बिना सुरक्षित रूप से पुन: फैक्टरिंग करना मुश्किल और खतरे से भरा है।

मैं इसके द्वारा शुरू करूंगा:

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

  • 100 या तो रूपों (कोड कोड पर स्विच करने में आपकी मदद करने के लिए उन कोड केस) को चलाएं।

उसके बाद आप यह देखने की स्थिति में हैं कि आप सुरक्षित रूप से क्या कर सकते हैं, फिर आप (एक उदाहरण):

  • अपना कोड डुप्लीकेशन डिटेक्शन टूल चलाएं (यकीन नहीं कि इसे .NET में क्या कहते हैं, जावा में हमारे पास सीपीडी है)। तुरंत 13 समान प्रपत्र निकालें। अब परीक्षण फिर से चलाएं - याय! वे सभी फॉर्म 11 को छोड़कर, ठीक हैं, इसलिए हम अभी तक इसे हटा नहीं सकते हैं।

  • सभी स्थानीय ईमेल फ़ॉर्मेटिंग कोड निकालें और सभी रूपों को एक सामान्य ईमेल प्रोसेसिंग मॉड्यूल के लिए कॉल करें। परीक्षण चलाएं, वे सभी को छोड़कर एक, hhmmm ठीक है .... UTF-8 वर्ण, सामान्य मॉड्यूल में ठीक करें, फिर से परीक्षण चलाएं, याय हम सब अच्छे हैं!

धोये और दोहराएं।


2
+1 देखें रेफरी से संपर्क करने के तरीके के संकेत के लिए लिगेसी कोड amazon.com/dp/0131177052 के साथ प्रभावी ढंग से काम करते हुए माइकल फेदर्स।
माइकल ब्राउन

ओह्ह अच्छा संदर्भ - मुझे वह पुस्तक पसंद है।
मार्टिज़न वेरबर्ग

0

मेरा सुझाव है कि सबमिशन भाग को समाप्त कर दिया जाए। मॉडल / दृश्य / नियंत्रक का उपयोग करके, प्रपत्रों को दृश्य में डालें, और उन्हें उसी नियंत्रक का उपयोग करें। यह नियंत्रक या तो एक सामान्य कार्रवाई कर सकता है, जैसे एक ईमेल को एक डिफ़ॉल्ट पते पर भेज सकता है, या एक नियंत्रक को प्रपत्र डेटा को डायवर्ट कर सकता है। इस तरह से आपको एक नया फॉर्म बनाने के लिए फॉर्म को बनाना होगा और आउटपुट को उस कंट्रोलर को निर्देशित करना होगा। यह अभिलेख एक एकल परियोजना में निहित हो सकता है, जो आपको सीएसएस और जावास्क्रिप्ट का उल्लेख करने की अनुमति देगा।

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

संयोग से, मैं प्रपत्र से तर्क के रूप में ईमेल पता नहीं डालूंगा। यदि आपको कई पते भेजने की आवश्यकता है, तो मेरा सुझाव होगा कि एक लुकअप टेबल जिसमें सभी फॉर्म और ईमेल हैं, उन्हें भेजने के लिए। इसे एक्सएमएल या कोड में लागू किया जा सकता है (मैंने दोनों को देखा है, हालांकि मैं निश्चित नहीं हूं कि या तो बेहतर है)। इससे स्‍पैमर्स को फॉर्म पेज से आपके ईमेल पते मिलने से बचने में मदद मिलेगी।


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

इसके अलावा, फॉर्म लॉजिक को संभालने की कोई सिफारिश जैसे ड्रॉपडाउन को दूसरे ड्रॉपडाउन में चयन पर आधारित है? यदि हम MVC मार्ग के साथ गए तो jQuery एकमात्र विकल्प है?
जोश अर्ल

@ जोशर्ल: मैंने फॉर्मेटर के लिए एक विचार में संपादित किया है, लेकिन मैं jQuery के बारे में कोई सुझाव नहीं दे सकता, आदि। वेब पेज साइड एक ऐसा क्षेत्र नहीं है जिसके बारे में सिफारिशें करने में मैं पूरी तरह से अक्षम हूं। यदि चीजें बहुत जटिल हैं, तो आपको पूर्ण MVC डिज़ाइन, प्रति पृष्ठ एक नियंत्रक के साथ जाना पड़ सकता है। जैसा कि @Martijn ने कहा, इकाई परीक्षण आपको यह देखने में मदद करेगा कि आपकी आवश्यकताएं क्या हैं। मेरा डिजाइन रूपों के बीच काफी समानता का अनुमान लगाता है।
माइकल के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.