हाल ही में, मैंने अपनी कंपनी के लगभग सभी स्रोत कोड को एक ही समाधान में स्थानांतरित कर दिया।
क्यों?
मूल रूप से, हमारे पास दर्जनों समाधान थे। एक समाधान से कुछ परियोजनाओं ने दूसरे से परियोजनाओं का पुन: उपयोग किया, और किसी ने पैकेज प्रबंधक का उपयोग करने की परवाह नहीं की। जिस दिन आप एक प्रोजेक्ट को काफी हद तक बदल देते हैं, जो अगले दिन या हफ्तों के लिए पूरी कंपनी के काम के घंटों और घंटों की उम्मीद करता है। सबसे बुरी बात यह है कि आप जान भी नहीं सकते बदलाव से वास्तव में क्या प्रभावित होगा।
सभी कोड को एक समाधान में विलय करना एक विकल्प था। यह पल के लिए अच्छी तरह से काम करता है, और निर्भरता अब पालन करना आसान है। एक विधि को संशोधित करना चाहते हैं, लेकिन यह परिवर्तन भी ट्रैक कर सकते हैं कि यह परिवर्तन कोड आधार में कहीं भी हो सकता है? विजुअल स्टूडियो आसानी से ऐसा कर सकता है। मेरे लिए, यह एक सफलता है।
निरंतर एकीकरण अब आसान भी है। संकलन और तैनाती का एक उपाय। कॉन्फ़िगर करने के लिए लगभग कुछ भी नहीं।
क्या यह स्केलेबल है?
प्रदर्शन-वार, मुझे विजुअल स्टूडियो ने बहुत आश्चर्यचकित किया । मैंने सोचा कि यह 50 परियोजनाओं के साथ एक समाधान के साथ रोना शुरू कर देगा। आज, 200 से अधिक परियोजनाएं हैं; दृश्य स्टूडियो उन्हें प्रबंधन करने के लिए पर्याप्त रूप में दिखाई देता था जैसे कि उनमें से केवल 20 थे। हां, कुछ चीजें हैं जो समय लेती हैं। यदि आप कोड अनुबंध, डिफ़ॉल्ट रूप से सक्षम कोड विश्लेषण, आदि के साथ हर परियोजना को फिर से जोड़ते हैं, तो उम्मीद करते हैं कि इसमें कुछ समय लगेगा। लेकिन कोई भी 200 परियोजनाओं को 10 के रूप में तेजी से संकलित करने की उम्मीद नहीं करेगा, और वैसे, आपको नहीं करना चाहिए: यह निरंतर एकीकरण सर्वर की भूमिका है। स्टार्टअप समय (ठंड शुरू करना, फिर समाधान लोड करना) प्रभावशाली रूप से तेज है ; शायद 10 परियोजनाओं के साथ उतनी तेजी से नहीं, लेकिन अभी भी बहुत स्वीकार्य (मशीन पर 20 सेकंड से पांच साल पहले खरीदा गया)।
आगे भी जाने के लिए, व्यवस्थित रूप से अनलोडिंग परियोजनाएं एक अच्छा विचार है (और वास्तव में आसान है जब परियोजनाओं को समाधान के भीतर निर्देशिकाओं में व्यवस्थित किया जाता है)। यदि कोई ऐसी चीज़ पर काम करता है जिसके लिए केवल तीन परियोजनाओं को लोड करने की आवश्यकता होती है, तो सभी 200 परियोजनाओं को लोड करने की कोई आवश्यकता नहीं है (जब तक कि, निश्चित रूप से, निर्भरताएं प्रभावित हो सकती हैं)।
संस्करण नियंत्रण अपेक्षित रूप से काम करता है (मैं एक SVN सर्वर का उपयोग कर रहा हूं, अगर यह मायने रखता है)। मैंने एक वास्तविक समवर्ती वातावरण में काम नहीं किया है, कहते हैं, दर्जनों डेवलपर्स अक्सर कोडिंग करते हैं, लेकिन मुझे लगता है कि इसमें बहुत सारे मुद्दे नहीं होंगे। बस उन मामलों से सावधान रहें जहां कई डेवलपर्स एक ही समय में नई परियोजनाएं जोड़ते हैं: .sln फ़ाइल को मर्ज करना सबसे आसान काम नहीं है।
निष्कर्ष
अगर मुझे फिर से फैसला लेना पड़ा:
मैं अभी भी एक ही समाधान में सब कुछ पलायन करूँगा। यह टूटी हुई निर्भरता के दर्द को काफी कम कर देता है, और अकेले यह लाभ पूरी तरह से इसके लायक है। सभी कोड के लिए एक केंद्रीकृत स्थान होना भी एक अच्छा विचार है; यह संभव बनाता है, उदाहरण के लिए, Visual Studio के भीतर किसी चीज़ की खोज करना। मैं दो कमजोर रूप से संबंधित परियोजनाओं पर भी काम कर सकता हूं, और अभी भी केवल एक विजुअल स्टूडियो विंडो खुली है।
मैं एक और अधिक NuGet और एक निजी NuGet सर्वर को होस्ट करने की क्षमता का भी अध्ययन करूंगा। जब आप कुछ प्रोजेक्ट्स को आम समाधान में नहीं जोड़ना चाहते हैं, तो NuGet के माध्यम से निर्भरता को प्रबंधित करना कुछ समस्याओं को हल कर सकता है। व्यक्तिगत रूप से, मेरे पास ऐसे मामले नहीं थे, लेकिन मुझे लगता है कि अन्य कंपनियों के पास हो सकता है।
अंत में, हर डेवलपर के लिए SSD में निवेश करने से भारी अंतर हो सकता है। लेकिन आपको इसकी आवश्यकता नहीं है, और मेरे मामले में, कोड आधार अभी भी एक साधारण हार्ड ड्राइव पर संग्रहीत है।