2011-11-22 15 views
6

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

मैं सहयोगियों है कि वे नहीं कोर परियोजनाओं की एक शाखा बनाने के लिए और अलग TFS परियोजनाओं में प्रतिलिपि रख दिया और केवल उत्पादन में एक रिलीज होने के बाद उद्यम एपीआई में वापस मूल परियोजना के लिए अतिरिक्त विलय चाहिए राजी करने के लिए कोशिश कर रहा हूँ। स्पष्ट रूप से निरंतर एकीकरण बहुत कम होगा जब इसकी कम बार-बार।

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

क्या यह शाखा के लिए बेहतर है, शाखाओं को टीएफएस परियोजनाओं को अलग करने के लिए प्रतिलिपि बनाएँ (फिर अंत में विवाद देखें) या कोर परियोजनाओं को समाहित करना और 20 की एक टीम को केवल एक प्रतिलिपि बनाने के लिए मजबूर करना बेहतर है कोर परियोजनाओं में से प्रत्येक का?

+2

एसओ के लिए यह विषय कैसे है? मैं कल्पना नहीं कर सकता कि यह हमारे प्रोग्रामर बहन साइट के लिए बेहतर फिट हो। –

उत्तर

2

मुझे पूरा यकीन है कि आप अपनी टीमों को कोर एपीआई के पहले से ही बाइनरी निर्मित करना चाहते हैं। पुन: उपयोग की सही विवरण के स्तर को, रिलीज (एक संस्करणीकृत निर्माण) को देखने के रॉबर्ट सी मार्टिन सी ++ 96 से रिपोर्ट और हमारे यहाँ विवरण के विवरण के स्तर को है: http://www.urbancode.com/html/resources/articles/reuse-maturity-model.html

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

+1

+1 वह प्रतिक्रिया थी जिसे मैं ढूंढ रहा था, लेकिन दूसरा जवाब मैं जवाब के रूप में चिह्नित कर रहा हूं क्योंकि इसके लिए तर्क और इसके खिलाफ तर्क हैं। आपके समय के लिए धन्यवाद, बहुत सराहना की। –

+0

मेरी इच्छा थी कि मैं दो उत्तरों स्वीकार कर सकता हूं ... कोई और इस लड़के को ऊपर उठाता है, वह लिंक मेरा डब्लूएमडी है! –

3

यह वास्तव में आपके साझा कोड की परिपक्वता पर निर्भर करता है। मैं कहूंगा कि वहाँ तीन तरीकों आप का अनुसरण कर सकते, अपने स्वयं के पक्ष-विपक्ष के साथ प्रत्येक:

विकल्प 1: सीधे उन्हें अपने टीम परियोजना

Team Project Application 1 
--> Development 
     --> ... 
--> MAIN 
     --> Sources 
      --> Application 1 
       --> Application1.sln 

Team Project Application 2 
--> Development 
     --> ... 
--> MAIN 
     --> Sources 
      --> Application 2 
       --> Application1.sln 

Team Project CoreProject 1 
--> Development 
     --> ... 
--> MAIN 
     --> Sources 
      --> CoreProject1.csproj 

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

यह एक अच्छा दृष्टिकोण है, तो आप लगातार CoreProject & बदल उन परिवर्तनों को जल्दी से सभी प्रभावित ऐप्स को देखना चाहते हैं तो है।
यह भी दर्शाता है कि आप एक निश्चित ऐप पर अस्थिरता का जोखिम उठा सकते हैं, क्या कोरप्रोजेक्ट में ब्रेकिंग बदलाव करना चाहिए।

विकल्प 2: परोक्ष रूप से

Team Project Application 1 
--> Development 
     --> ... 
--> MAIN 
     --> SharedSources 
      --> CoreProject1_branch 
       --> CoreProject1.csproj 
     --> Sources 
      --> Application 1 
       ---> Application1.sln 

Team Project Application 2 
--> Development 
     --> ... 
--> MAIN 
     --> SharedSources 
      --> CoreProject1_branch 
       --> CoreProject1.csproj 
     --> Sources 
      --> Application 2 
       ---> Application1.sln 

Team Project CoreProject 1 
--> Development 
     --> ... 
--> MAIN 
     --> Sources 
      --> CoreProject1.csproj 

शाखाओं में इस दृष्टिकोण के साथ के माध्यम से उन्हें संदर्भ, हर बार जब आप CoreProject1 में परिवर्तन में जाँच की है, आपको प्रत्येक प्रभावित आवेदन करने के लिए किसी मर्ज को व्यवस्थित करने की जरूरत है। यह कुछ प्रयास करता है, लेकिन आपको कोरप्रोजेक्ट को अपने खेल के मैदान पर स्थिर करने का समय देता है और फिर इसे अपने ऐप्स में विलय करता है।
इस दृष्टिकोण का तात्पर्य है कि आपके पास प्रत्येक कोरप्रोजेक्ट के लिए बिल्ड परिभाषा भी है।
सामान्य रूप से यह आगे बढ़ने का एक अच्छा तरीका है यदि आप CoreProject & की स्थिरता मानते हैं तो आपके ऐप्स को 'दूषित' करने का जोखिम नहीं उठा सकता है, जिससे समस्याएं हो सकती हैं। यह उस दृष्टिकोण के बारे में है जिस पर हम गए थे।

विकल्प 3: प्रत्येक आवेदन

Team Project Application 1 
--> Development 
     --> ... 
--> MAIN 
     --> SharedBinaries 
      --> CoreProject1_branch 
       --> CoreProject1.dll 
     --> Sources 
      --> Application 1 
       ---> Application1.sln 

Team Project Application 2 
--> Development 
     --> ... 
--> MAIN 
     --> SharedBinaries 
      --> CoreProject1_branch 
       --> CoreProject1.dll 
     --> Sources 
      --> Application 2 
       ---> Application1.sln 

Team Project CoreProject 1 
--> Development 
     --> ... 
--> MAIN 
     --> Sources 
      --> CoreProject1.csproj 

इस दृष्टिकोण के साथ में फ़ाइल संदर्भ बनाने, तुम d एक CoreApplication प्रत्येक आवेदन में निर्माण की बाइनरी उत्पादन में जाँच करने के लिए की जरूरत है।
यह केवल तभी अनुशंसा की जाती है जब आपको विश्वास हो कि CoreAplication स्थिर है & आपको इसे नियमित आधार पर डीबग करने की आवश्यकता नहीं होगी।

अनिवार्य रूप से विकल्प 2 & विकल्प 3 समान हैं, प्रसिद्ध बहस "प्रोजेक्ट बनाम फ़ाइल संदर्भ" से अलग हैं। एसओ संसाधन के लिए here देखें, खोजों के माध्यम से बहुत अधिक पुनर्प्राप्त किया जा सकता है।

यदि आपके कोर प्रोजेक्ट निरंतर परिवर्तन के कारण हैं और/या कम इकाई परीक्षण कवरेज है तो आपको विकल्प 2 (या 3) के लिए जाना चाहिए।
यदि आप उनकी गुणवत्ता पर भरोसा रखते हैं, तो विकल्प 1 के लिए जाना एक अच्छा विकल्प है, क्योंकि इससे आपकी समग्र उत्पादकता में काफी वृद्धि होगी।

आपके उत्पादों और उनकी गुणवत्ता पर किसी भी जानकारी के बिना, केवल आपके द्वारा प्रदान की जाने वाली काफी बड़ी संख्या (20 लोग, 50 समाधान, 7 कोर प्रोजेक्ट) के आधार पर, मैं विकल्प 2/3 के लिए जाऊंगा।

एक और महत्वपूर्ण संकेत: यह अक्सर से अधिक होता है कि साझा प्रोजेक्ट में अलग परीक्षण का कोई साधन नहीं है। यदि यह मामला है और कोर प्रोजेक्ट्स के पास कोई यूनिट टेस्ट नहीं है, कोई समर्पित टेस्ट प्लान इत्यादि नहीं है, तो विकल्प 1 से कुछ और करने में कोई बात नहीं है।

इस मामले पर एक अतिरिक्त महान संसाधन एएलएम रेंजरों द्वारा work है।

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