हमारे काम में, हमारे पास कई अलग-अलग .net अनुप्रयोग हैं जो बहुत अधिक आधार कार्यक्षमता साझा करते हैं। हमने इन एप्लिकेशन को एक साफ n-tier आर्किटेक्चर का उपयोग करके बनाया है, लेकिन हमने उस क्षण को मारा है जहां हमें एहसास होता है कि हमने एक ही कार्य को कई अलग-अलग समयों में फिर से लागू किया है। जाहिर है कि यह DRY का उल्लंघन करता है, और हम इसे ठीक करना चाहेंगे। हम पहले से ही आम गोंद कोड (IoC, लॉगिंग, सेटिंग्स को वायरिंग) के लिए कुछ सफलता के लिए Nuget का उपयोग कर रहे हैं, लेकिन हम अपने सभी अनुप्रयोगों के बीच हमारे डेटा और व्यावसायिक परतों को भी साझा करना चाहते हैं। विचार यह है कि यूआई केवल उस व्यवसाय परत के हिस्सों से निपटेगा जो वास्तव में इसकी आवश्यकता है।
यह पहली बार में सीधे-सीधे समस्या की तरह लगता है, लेकिन चल रहा विकास कुछ नुकसान दे सकता है और हमें यकीन नहीं है कि कैसे आगे बढ़ना है। मान लें कि हम अपने सभी एक व्यावसायिक नियम को नियम सभी के लिए बनाते हैं। संक्षिप्तता के लिए, मैं इसे "फाउंडेशन" कहूंगा। हम अपने अनुप्रयोगों को फाउंडेशन का उपयोग करने के लिए पोर्ट करते हैं, और सब कुछ बहुत बढ़िया चल रहा है। फाउंडेशन यूजी लेयर्स को नगेट के माध्यम से वितरित करने के लिए वितरित किया जाता है, और हम अच्छे दिख रहे हैं। लेकिन फिर हम अपने अनुप्रयोगों में सुविधाओं को जोड़ना शुरू करते हैं, और हम परेशानी में पड़ जाते हैं।
मान लीजिए कि हम प्रोजेक्ट ए पर काम कर रहे हैं और हम एक नई सुविधा जोड़ते हैं, जिसके लिए फाउंडेशन में बदलाव की आवश्यकता है। हम नींव (फाउंडेशन-ए) में बदलाव करते हैं और उन्हें एक अस्थिर पैकेज के रूप में नगेट फीड पर धकेल देते हैं। प्रोजेक्ट ए को नवीनतम नगेट पैकेज मिलता है, और सभी अच्छे हैं। इस बीच, एक अन्य डेवलपर प्रोजेक्ट बी पर काम कर रहा है। उसे स्रोत नियंत्रण से नवीनतम फाउंडेशन मिलता है, लेकिन इसे एक स्थिर शाखा से लेता है, ताकि इसमें प्रोजेक्ट ए में बदलाव न हो। वह बदलाव करता है और फाउंडेशन-बी बनाता है। और सब अच्छा है। लेकिन तब हमें पता चलता है कि फाउंडेशन-ए और फाउंडेशन-बी कार्यान्वयन की कार्यक्षमता है जो वास्तव में कोड साझा कर सकते हैं, इसलिए हम उन्हें जोड़ते हैं। इस बीच फाउंडेशन-सी वहां परिवर्तन के साथ चल रहा है। आखिरकार, फाउंडेशन-बी उत्पादन के लिए तैयार है, इसलिए हम इसे बाहर निकालते हैं। लेकिन फिर हमें उत्पादन ए, बी, को अपडेट करना होगा
ऐसा लगता है कि यह काम कर सकता है, लेकिन हम अलग-अलग डेटाबेस स्कीमा के साथ काम करने और फाउंडेशन रिपॉजिटरी की विभिन्न शाखाओं के साथ-साथ प्रोजेक्ट ए, बी, और सी रिपॉजिटरी के बीच सब कुछ सिंक्रनाइज़ रखने के बारे में चिंतित हैं। ऐसा लगता है कि यह संभवतः बहुत सारे मैनुअल काम करेगा, जो त्रुटियों की संभावना को खोलता है। मैं इसे यथासंभव स्वचालित चाहूंगा।
यहां वह स्टैक है जिसका हम उपयोग कर रहे हैं: C #, TFS कंटीन्यूअस इंटीग्रेशन के साथ, Nuget। हमारे आवेदन ASP.NET अनुप्रयोगों के सभी विभिन्न प्रकार हैं। हम अलग-अलग एससीएम को देखने के लिए तैयार हैं यदि यह चीजों को आसान बना देगा।
मैं अपनी अलग स्रोत कोड शाखाओं के साथ Nuget समझ रखने के तरीकों की तलाश कर रहा हूं। हम गलती से विकास कोड को उत्पादन में धकेलना नहीं चाहते क्योंकि हम गलत Nuget पैकेज का संदर्भ देते हैं।