2010-02-16 15 views
6

हम वर्तमान में लिंक के साथ हमारे सी # एप्लिकेशन में ADO.NET स्टैक को बदलना शुरू कर रहे हैं।सिस्टमिक ऑब्जेक्ट्स के प्रतिस्थापन के लिए रणनीति

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

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

हम साथ toyed है निम्नलिखित:

  • नए कोड के साथ प्रत्येक वस्तु का एक दर्पण वस्तु बनाएं = ADO_ साथ एडीओ कार्यों का
  • उपसर्ग सभी फ़ंक्शन नाम पूर्ण रूपांतरण जब तक 2 कोड ठिकानों बनाए रखने के लिए है और मूल नाम
  • के साथ लिंक संस्करण बनाएं, यह निर्धारित करने के लिए एक सिस्टम विस्तृत फ़्लैग है कि एडीओ या लिंक का उपयोग करना है या प्रत्येक एडीओ कॉल को लपेटें (FLAG) {ADO} अन्य {Linq} = रूपांतरण के बाद वापस जाना होगा और सभी को हटा देना होगा एडीओ रेफरी

अब तक हर सुझाव क्रिंग-योग्य है।

आप लोग क्या कहते हैं/gals सुझाव देते हैं?

नोट: मैं शीर्षक क्योंकि मैं अधिक सामान्य जवाब और प्रथाओं रहा हूँ और सिर्फ एक उदाहरण यहाँ के रूप में इस्तेमाल Linq रूपांतरण के लिए ADO तक ही सीमित नहीं से हटा दिया '(लिंक करने के लिए एडीओ)'।

उत्तर

3

आपको कोई भी बदलाव करने से पहले स्वचालित इकाई परीक्षण होना चाहिए। वास्तव में, आपको उस कोड के लिए कोई बदलाव नहीं करना चाहिए जो यूनिट परीक्षणों द्वारा कम से कम 80% तक कवर न हो।

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

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

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

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

एक बार जब आप कोड को पर्याप्त रूप से परीक्षण कर चुके हैं, तो फिर आप बेहतर समझने के लिए कोड को पुनर्गठित कर सकते हैं, और उसके बाद इसे LINQ का उपयोग करने के लिए इसे संशोधित करने के लिए संशोधित कर सकते हैं।

2

आप अभी भी लिंकक 2 एसक्यूएल के साथ अपने समाधान के लिए बनाए गए सभी संग्रहीत प्रक्रियाओं/कार्यों का लाभ उठा सकते हैं। मिशेल फेदर के Working with Legacy Code में व्यक्त की गई रणनीतियों की तरह कुछ का उपयोग करके आप एप्लिकेशन के क्षेत्रों के आसपास सीमाएं बना सकते हैं और उन सीमाओं के भीतर अपडेट कर सकते हैं।

मैंने जो रणनीति पहले उपयोग की है वह डेटाबेस और इसकी वस्तुओं को बनाए रखने/अनदेखा कर रही है। मैं फिर धीरे-धीरे अलग-अलग एडीओ कॉल के माध्यम से पुन: प्रयास करता हूं और Linq2SQL कॉल के साथ प्रतिस्थापित करता हूं जब तक कि पूरा एप्लिकेशन Linq2SQL का उपयोग नहीं कर रहा हो। इसके बाद मुझे पिछली एडीओ कॉलों को बदलने में आसान लगता है जो डेटासेट/डेटाटेबल्स को अधिक उचित इकाइयों में उजागर और पारित कर देते हैं।

एक और दृष्टिकोण (डेटासेट/DataTable भारी समाधान के लिए) एडीओ जगह में कॉल करता है और बदले में विस्तार तरीकों का उपयोग रखना है AsQueryable() और/या OfType<T>() डी एस/उचित संस्थाओं में डीटी आइटम को बदलने के लिए है, तो एक में इन परिवर्तनों कुल अधिक संगत डीएएल।

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