एक विकास दल यह क्यों जोर देगा कि दृश्य स्टूडियो में कई परियोजनाओं के लिए एकल समाधान का उपयोग करने से "अन्योन्याश्रय जटिलता बढ़ जाती है"?


26

मैं एक बाहरी टीम को प्रबंधित करने में मदद कर रहा हूं जो कुछ मौजूदा उत्पादों के नए संस्करण विकसित करना शुरू कर रहे हैं। ऐतिहासिक रूप से, इस टीम ने विजुअल स्टूडियो में लगभग 30 मॉड्यूल के लिए एक एकल समाधान में एक एकल परियोजना के मॉडल का उपयोग किया है जो एक साथ एक निर्माण योग्य निर्माण के लिए जाते हैं।

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

मैं जोर देकर कहता हूं कि यह बकवास है और अच्छे विकास पैटर्न ऐसी किसी भी समस्या से बचेंगे।

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

क्या मुझे कुछ याद आ रहा है? क्या उस कोड को अलग रखने का कोई अच्छा कारण है? मेरे पैसे के लिए यह एक कारण है कि यह सामान्य ज्ञान होगा सम्मोहक होना होगा, लेकिन मैं स्वीकार करने के लिए तैयार से अधिक है कि मैं सब कुछ नहीं जानता।


5
यदि टीम बाहरी है, तो कुछ भी बदलने की कोशिश करना मुश्किल होगा। समस्या पर ध्यान केंद्रित करने के बजाय आप अपने विचार को आगे बढ़ाने की कोशिश कर रहे हैं। समस्या यह है "वे हमेशा हमें दिनांक कोड तक नहीं भेजते हैं", क्या उन्होंने इस मुद्दे को हल किया है, जिस तरह से वे पसंद करते हैं। क्या वे आपको संस्करण नियंत्रण प्रणाली तक पहुँच प्रदान नहीं कर सकते?
RMalke

9
यह बकवास लगता है। परियोजनाएं एक या तीस समाधानों में एक-दूसरे पर निर्भर नहीं रहेंगी। कोड को अलग-अलग समाधानों में रखने का कारण यह है क्योंकि परिणामी लाइब्रेरी का उपयोग कई, अलग-अलग तैनाती योग्य बिल्ड द्वारा किया जाता है। यह आपके लिए मामले की तरह नहीं है।
डेविड अरनो

3
ऐसा लगता है कि आपके पास बहुत सारी गैर-तकनीकी समस्याएं हैं जो आपके अनुबंध और काम के बयानों में बदलाव के द्वारा हल की जाती हैं।
रोस पैटरसन

9
एक ही समाधान बनाने का मतलब यह नहीं है कि उन्हें व्यक्तिगत समाधान छोड़ना होगा, क्योंकि एक परियोजना एक से अधिक समाधान में मौजूद हो सकती है।
एरिक Eidt

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

जवाबों:


54

आपको उन्हें यह बताने की आवश्यकता नहीं है कि उनकी परियोजनाओं को कैसे तैयार किया जाए। इसके बजाय, यह एक कठिन आवश्यकता है कि आप किसी भी त्रुटि के बिना, एक एकल स्क्रिप्ट चलाकर स्रोत से सिस्टम का निर्माण कर सकते हैं। यदि वह स्क्रिप्ट विजुअल स्टूडियो या Msbuild या कुछ अन्य टूल चलाता है, और यदि उन्हें एक बार कॉल किया जाता है, तो 50 या 100 बार कोई बात नहीं होनी चाहिए।

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

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

फिर भी मैं एक बिल्ड स्क्रिप्ट जोड़ने का सुझाव दूंगा। केवल एक समाधान फ़ाइल होने पर भी इसके लाभ हैं। उदाहरण के लिए, यह एक पसंदीदा विन्यास के साथ एक वी.एस. बिल्ड को चलाने की अनुमति देता है, आपको तैनाती (और कुछ नहीं) के लिए अंतिम फाइलों को एक "तैनाती" फ़ोल्डर में कॉपी करने देता है, और बिल्ड को पूरा करने के लिए कुछ अन्य टूल और चरण चला सकता है। यह भी देखें F5 एक निर्माण प्रक्रिया नहीं है! , और द जोएल टेस्ट


हां, मैं मानता हूं कि F5 एक बिल्ड प्रक्रिया नहीं है, लेकिन हम रेजिमेंट्स और अपडेट विफलताओं के कारण एंड-टू-एंड परीक्षण के लिए हमारी QA प्रक्रिया से बाहर निकलने से पहले देव टीम के भीतर उनके कोड का परीक्षण करना चाहते हैं। जैसा कि मैंने कहा है, हमारे पास उनके टीएफएस तक पहुंच नहीं है इसलिए हमें अपने कोडबेस में उनके बदलावों को आयात करना होगा, और फिर टीएफएस पर इसकी जांच करनी होगी। अभी यह प्रक्रिया इतनी खराब है कि चेकइन पर ऑटोबिल्ड चलाना समय की कुल बर्बादी है! हमारे पास अपने उत्पाद की बाकी संपत्ति पर ऑटोबायिल्ड है और यह वास्तव में हमारे लिए बहुत अच्छी तरह से काम करता है।
DrMistry

बस जोड़ना चाहता था, कि "द जोएल टेस्ट" सामान उत्कृष्ट है और मैं एक अच्छा लुक देने की सलाह दूंगा। बहुत बहुत धन्यवाद!
DrMistry

3

यह इस बात पर निर्भर करेगा कि संकलित असेंबली का फिर से कितना उपयोग किया जाता है। यदि असेंबली का पुन: उपयोग नहीं होता है, तो "मॉड्यूल" को अलग रखने का कोई वास्तविक कारण नहीं है। मेरे अनुभव में वास्तव में यह एक बाधा है।

विकास टीम में, हम एक स्वतंत्र पुस्तकालयों का हिस्सा हैं जो हमने लिखा है कि कई उत्पादों में एक अलग समाधान के रूप में उपयोग किया जाता है, जो इस मामले में समझ में आता है अन्यथा हमें आवेदन बी को अद्यतित रखने के लिए एप्लिकेशन ए को संकलित करना होगा, जिसे एप्लिकेशन C को अद्यतित रखना आवश्यक हो सकता है।

प्रत्येक उत्पाद को अपने स्वयं के समाधान में रखा जाता है, भले ही कई परियोजनाएं उत्पाद बना रही हों। इस तरह हमें केवल सभी विकसित उत्पादों में अपने साझा कोड को बनाए रखने के लिए लाइब्रेरी समाधान का निर्माण करना होगा।


विभाजित परियोजनाओं में से किसी का भी उपयोग कहीं और नहीं किया जाता है, यह निराशाजनक बात है। वे सभी इस एक एकल उत्पाद और कहीं और उपयोग किए जाते हैं!
DrMistry

1

मैंने जिस भी सॉफ्टवेयर कंपनी के लिए काम किया, उसकी कोर डेवलपमेंट टीम थी, जिसने कंपनी के उत्पादों के फाउंडेशनल यूज के मामलों को कवर करने वाली हेड ब्रांच दी।

ब्रांच डेवलपर्स जो कोर रिपॉजिटरी का उपयोग करते हैं, सुधार की खोज और समीक्षा के लिए हेड ब्रांच के लिए पुल अनुरोध सबमिट करने के लिए जिम्मेदार हैं। यह आमतौर पर होता है कि कैसे कोई एक कोर डेवलपर बन जाता है, किसी को दिखा कर वास्तु संघर्ष की लपटों को झेलने से बेहतर योगदान दे सकता है।

यह संभव है कि आपकी कंपनी के पास तुरंत "सभी संदर्भित कोड को एक एकल समाधान" एकजुट करने के लिए संसाधन नहीं हैं। उनके बजटीय बाधाओं को समझने के बिना ऐसा करने का सुझाव देना (बहुत कम से कम) एक को मुख्य इंजीनियर बनने से रोकने की संभावना है।

तो कोर के लिए कुछ विनाशकारी पुल अनुरोधों में अपनी भव्य दृष्टि तैयार करें, और समीक्षा में अपने आप को बचाने के लिए तैयार करें!


0

सत्य में एक सच्चाई है कि "कई परियोजनाओं के लिए एकल समाधान का उपयोग करने से अन्योन्याश्रय जटिलता बढ़ जाती है"।

एक एकल समाधान एक परियोजना को दूसरी परियोजना से संदर्भित करता है (यानी एक परियोजना के कोड का पुन: उपयोग aka "अन्योन्याश्रय जटिलता का परिचय") आसान:

  • संदर्भित विधानसभा के लिए अपने पूरे फाइल सिस्टम / ग्लोबल असेंबली कैश को ब्राउज़ करने के बजाय, आप समाधान में संबंधित परियोजनाओं के सीमित सेट से परियोजना का चयन कर सकते हैं; तथा,
  • स्रोत कोड पढ़ते समय, एक मनमाना (बाइनरी) असेंबली की तुलना में समाधान में संदर्भित परियोजना पर कूदना अधिक आसान होता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.