मैंने कुछ साल पहले (कंपनी के कस्टम ईआरपी सिस्टम) VB6 प्रोजेक्ट के साथ शुरुआत की थी और मैं धीरे-धीरे इसे .NET पर माइग्रेट कर रहा हूं। यह कहीं-कहीं आधा-अधूरा काम है।
सबसे पहले, VB6 से VB.Net में परिवर्तित करना लगभग हमेशा एक बुरा विचार है (और मैंने उस पर बहुत शोध किया)। वहाँ बस बहुत अलग है। इसके अलावा, अगर आपके बॉस को लगता है कि VB.Net "बस VB6 की तरह है" तो वह पूरी तरह से गलत है और आपको अपना आउटलुक तेजी से बदलना होगा।
मेरी रणनीति दो कोड-बेस को अलग-अलग रखने और उन्हें अलग-अलग रखने और फिर धीरे-धीरे पूरे मॉड्यूल को VB6 से .NET तक ले जाने की थी, लेकिन केवल जब उस मॉड्यूल के बारे में एक महत्वपूर्ण परिवर्तन हुआ था, तो हम कुछ लागत को संशोधित कर सकते थे। फिर भी, पुनर्लेखन एक बड़ा महंगा और जोखिम भरा काम है।
मौजूदा VB6 को नए .NET कोड के साथ एकीकृत करने के दो तरीके हैं (और आप शायद ऐसा बहुत लंबे समय तक करेंगे, इसलिए आप बेहतर तरीके से इस विचार के अभ्यस्त हो जाएंगे)। मैंने इसके बारे में पहला तरीका .NET में छोटे मॉड्यूल लिखना शुरू किया था और फिर मुख्य VB6 एप्लिकेशन को कुछ कमांड लाइन मापदंडों में गुजरने वाले .NET निष्पादन योग्य लॉन्च किया है। यह काम किया है, लेकिन चेतावनी दी है कि .NET में 4 से 10 सेकंड का स्टार्ट-अप टाइम हिट है, इसलिए आप सीमित हैं कि आप इस तरह से क्या कर सकते हैं।
एक बार जब यह वास्तव में दर्दनाक होना शुरू हो गया, तो मैंने रणनीति को फ़्लिप किया और अपने मुख्य .NET अनुप्रयोग में मौजूदा VB6 फॉर्म प्रदर्शित करने के लिए इस CodeProject लेख से विधि का उपयोग किया । एक बार जब मैं इस मार्ग से नीचे चला गया, तो मैं केवल एक .NET स्टार्टअप समय हिट को प्राप्त करने में सक्षम था, और तैनाती के लिए ClickOnce का उपयोग करता था, जो पहले VB6 ऐप कैसे तैनात किया गया था, इसकी तुलना में एक गॉडसेंड था।
मैंने कहा, यहाँ VB6 पर .NET में मिलने वाले फायदे हैं:
- बेहतर दृढ़ता रूपरेखा (NHibernate, EntityFramework, Linq2Sql आदि)
- LINQ (मैं पर्याप्त तनाव नहीं कर सकता कि यह कितना महत्वपूर्ण है)
- जेनेरिक्स!
- लैम्ब्डा सिंटैक्स ("छेद के बीच में" जैसे सभी समस्याओं को हल करता है)
- इसी तरह
Action
और Func
प्रकार
- प्रतिबिंब (कुछ ऐसा जो आप शायद ही कभी उपयोग करते हैं, लेकिन जब आप इसे बड़ा करते हैं)
- बहुत बेहतर इकाई परीक्षण समर्थन (बेशक, मुझे संदेह है कि आप अपने अन्य कर्मचारियों को इकाई परीक्षण के लिए मना लेंगे, लेकिन आपको चाहिए)
- ReSharper (और अन्य रीफैक्टरिंग / प्रोफाइलिंग उपकरण) (MZ-Tools की तुलना में 10x बेहतर)
- क्लिकऑन और / या सेटअप / इंस्टॉलर प्रोजेक्ट
- विंडोज सर्विस प्रोजेक्ट
- सच्चा ऑब्जेक्ट-ओरिएंटेड सपोर्ट (VB6 COM पर आधारित है और इस विभाग में वास्तव में खराब है।)
- स्थैतिक टाइपिंग
- XML समर्थन में बेक्ड
- WPF और विंडोज फॉर्म (VB6 के नियंत्रण बहुत सीमित हैं)
- WCF
- बहुत अधिक उदाहरण कोड ऑनलाइन
- अपवाद (VB6 की त्रुटि से निपटने की तुलना से बिल्कुल भयानक है)
- विजुअल स्टूडियो के स्रोत नियंत्रण एकीकरण
Decimal
प्रकार (VB6 में प्रथम श्रेणी दशमलव प्रकार कभी नहीं था, भले ही इसमें CDec हो)
- के लिए प्रथम श्रेणी का समर्थन
Guid
- 64-बिट पूर्णांक के लिए प्रथम श्रेणी का समर्थन
- बेहतर संग्रह पुस्तकालय
- ReportViewer
- मल्टीथ्रेडिंग, टास्क समानांतर लाइब्रेरी
VB6 के नुकसान:
- आप इसे एक प्रदर्शन नोटिस करेंगे। यह चिंता करने के लिए पर्याप्त नहीं हो सकता है, लेकिन मुझ पर भरोसा करें, आप इसे नोटिस करेंगे। VB6 सभी के बाद मूल कोड के लिए संकलित करता है।
निष्पक्ष होने के लिए, यहाँ एक संयुक्त VB6 / .NET समाधान बनाए रखने के कुछ नुकसान हैं:
- दो डेटा एक्सेस लेयर को बनाए रखना (अपने VB6 ऐप को वास्तव में एक मान लेना)
- सेवाओं / रूपों / आदि को उजागर करने के लिए अतिरिक्त वायरिंग। एक तरफ से दूसरी तरफ
- अपने सिर में रखने के लिए दो बार जटिलता / वास्तुकला
अब, जैसा कि आपने संकेत दिया है, आप वास्तव में अपने आर्किटेक्चर को जमीन से पुनर्निर्माण करना चाहते हैं यदि आप .NET में कोड लिखना शुरू करते हैं। हालाँकि, ऐसा लगता है कि आपकी कंपनी का कोई भी व्यक्ति .NET या / या जावा प्रोग्रामिंग की दुनिया से परिचित नहीं है, जो कि बहुत सारे पैटर्न और व्यवहार हैं जो सामान्य से लेकर बड़े एंटरप्राइज़ फ्रेमवर्क से आते हैं।
यदि आप किसी ऐसे व्यक्ति को लेते हैं, जो किसी फॉर्म पर एक बटन खींच रहा है, तो उस पर डबल क्लिक करें, और क्लिक इवेंट हैंडलर में सीधे कुछ एसक्यूएल स्ट्रिंग्स लिख रहा है, और जो उनके लिए काम कर रहा है, उन्हें सोलिड का अनुसरण करने के लिए उन्हें फायदा पहुंचाना वास्तव में कठिन है। डिज़ाइन सिद्धांत। दूसरी ओर, यदि आप बुलेट को काटते हैं और यह तय करते हैं कि सभी नए कोड स्वचालित इकाई परीक्षणों द्वारा 90% या उससे अधिक कवर होने जा रहे हैं, तो आपको जल्दी से एहसास होगा कि जब तक आप SOLID डिजाइन सिद्धांतों को नहीं अपनाते हैं, तब तक यह करना मुश्किल है।
इसलिए आपको स्थिति की वास्तविकता पर बहुत कठोर नज़र डालने की आवश्यकता है। मेरे मामले में, मैं एकमात्र प्रोग्रामर था, और मैंने सभी नए कोड को इकाई परीक्षण के लिए निर्धारित किया था, भले ही मुझे इसके साथ कोई अनुभव नहीं था। मैं पर्याप्त तनाव नहीं कर सकता कि इस नकारात्मक प्रभाव ने मुझे पहले सप्ताह में, यहां तक कि पहले महीनों में क्या मिल सकता है। फिर भी, मैं इसे करने के लिए दृढ़ था, और मैंने प्रबंधन से खरीदारी की थी। अधिकांश लोगों के पास वह विलासिता नहीं है। अब मेरे पास बहुत सारे कोड हैं और मैंने लगभग किसी भी मुद्दे के साथ एक प्रमुख रिफैक्टिंग को पूरा किया है।
वास्तविक रूप से, आप इकाई परीक्षण नहीं करने जा रहे हैं, जिसका अर्थ है कि आपकी टीम के साथियों के लिए निर्भरता इंजेक्शन जैसे सिद्धांतों को सही ठहराना कठिन है। आप वास्तु लाभ के अलावा अन्य गुण पर .NET को बेचने जा रहे हैं। आपको बेहतर पुस्तकालय समर्थन और बेहतर उपकरणों पर ध्यान केंद्रित करना होगा। यही एक चीज है जो गूंजती रहेगी। मैं आपके डेमो में निम्नलिखित का सुझाव दूंगा:
- एक Windows प्रपत्र प्रोजेक्ट बनाएँ (WPF और xaml से दूर रहें - यह बहुत चौंकाने वाला है)
- SQL डेटाबेस से कनेक्ट करें (कुछ परीक्षण डेटाबेस)
- इसके लिए एक डेटा मॉडल बनाने के लिए Linq2Sql या EntityFramework का उपयोग करें
- एक रिपॉजिटरी वर्ग बनाएँ जिसमें कुछ संस्थाओं की सूची वापस करने की विधि हो
- Linq का उपयोग करते हुए उस विधि में एक क्वेरी लिखें, intellisense को इंगित करें
- बताते हैं कि linq सभी वस्तुओं पर काम करता है, न कि केवल संस्थाओं के लिए
- दिखाएँ कि यदि आप डेटाबेस को बदलते हैं और मॉडल को पुन: उत्पन्न करते हैं, तो आपको एक संकलन त्रुटि मिलती है
DataGridView
मुख्य विंडो पर ड्रॉप करें
- ग्रिड को रिपॉजिटरी से संस्थाओं के साथ आबाद करके डेटाबाइंडिंग प्रदर्शित करें
- ग्रिड के बारे में सभी शांत सामग्री को इंगित करें जो VB6 से बहुत बेहतर है
- एक .rdlc फ़ाइल बनाएँ (रिपोर्ट)
- Visual Studio के अंदर एक साधारण रिपोर्ट बनाएं
- खिड़की पर एक रिपोर्ट दर्शक छोड़ें और रिपोर्ट दर्शक के अंदर रिपोर्ट प्रस्तुत करें
- (जाहिर है आप की जरूरत है ReportViewer स्थापित और यह सब पहले अभ्यास किया है)
- "बीच में छेद" समस्या के साथ आओ और फिर
Action
एक पैरामीटर के रूप में एक विधि बनाकर इसे हल करने का प्रदर्शन करें । पैरामीटर के रूप में एक और विधि पारित करके पहले ऐसा करें, और फिर लंबोदर सिंटैक्स का उपयोग करके एक अनाम प्रतिनिधि को पास करके उनके दिमाग को उड़ा दें
List<T>
और Dictionary<T1,T2>
संग्रह कक्षाओं का उपयोग करके जेनरिक का प्रदर्शन करें और दिखाएं कि यह कैसे जोरदार टाइप कोड बनाता है (VB6 में समान सामान है, लेकिन यह गतिशील रूप से टाइप किया गया है)
- एक
foreach
लूप लिखें जो शर्मनाक रूप से समानांतर है, System.Diagnostics.Stopwatch
इसे निष्पादित करने में लगने वाले समय को मापने के लिए उपयोग करें, फिर लूप को लूप में बदलने के लिए कार्य समानांतर लाइब्रेरी का उपयोग करें Parallel.Foreach
और मल्टी-कोर मशीन पर मानकर स्पीड-अप प्रदर्शित करें।
- वैश्विक अपवाद हैंडलर जोड़ने की क्षमता का प्रदर्शन करें (यह ऐसा कुछ है जो VB6 नहीं कर सकता)
यही मैं करता।