2010-01-08 15 views
8

यहां कुछ बहस है जो अन्य परियोजनाओं से हमारे सामान्य कोड बेस को संदर्भित करने के लिए बेहतर है: परियोजना या असेंबली द्वारा। मैं इस परियोजना को संदर्भित करने के पक्ष में हूं, खासकर जब से हमारे पास स्वचालित यूनिट परीक्षण हैं जो साबित करते हैं कि सामान्य कोड की आवश्यकता होती है।वीएसएनईटी: परियोजना रेफरी बनाम असेंबली रेफरी

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

यहां कारणों से मैं सोच सकता हूं कि परियोजना संदर्भ बेहतर समाधान क्यों हैं। मैं अन्य राय भी ढूंढ रहा हूं।

पेशेवरों:

  • संदर्भित परियोजनाओं सुनिश्चित करता है कि आप नवीनतम कोड के साथ काम कर रहे हैं। आपको कुछ भी इंतजार नहीं करना है।
  • डुप्लिकेशंस को कम करना। नवीनतम कोड के बिना, पहिया को पुनर्निर्मित करने का एक बड़ा मौका है।
  • यदि किसी डेवलपर को कुछ चाहिए और इसे असेंबली में जोड़ नहीं सकता है, तो यह किसी भी स्थान पर बनाया जाएगा जो काम करेगा, कई असंगतताएं और कोड डुप्लिकेशन बना देगा।
  • विकास आसान है क्योंकि आप संदर्भित कोड में क्या हो रहा है आसानी से देख/डीबग कर सकते हैं।
  • हमारी आम सामग्री अक्सर बदलती नहीं है, लेकिन जब ऐसा होता है, तो यह आमतौर पर कुछ उपयोगी होता है। रखरखाव और असेंबली रिलीज प्रबंधन का अतिरिक्त बोझ क्यों जोड़ें।

कान्स:

  • संभवतः लोड करने के लिए अधिक समय लग सकता है।
  • असेंबली संदर्भ जोड़ने के बाद नए समाधान में परियोजनाओं को जोड़ने में थोड़ा समय लग सकता है। एक अगर आपके पास: के रूप में आप एपीआई बदल रहे हैं
  • गोटो परिभाषा IntelliSense जैसी सुविधाएं संदर्भ परियोजना से परियोजना के बीच आप अपडेट हो जाएगा:
+1

तो सवाल पूछता है? –

+0

"मैं अन्य राय भी ढूंढ रहा हूं।" –

+0

हमारे लिए बड़े 'कॉन' में कई समाधानों में परियोजनाएं हैं: संदर्भ परियोजना पर है, प्रति समाधान नहीं, इसलिए आप वास्तविक गड़बड़ी –

उत्तर

4

यहां प्रो की एक जोड़ी आप

  • लाइव अपडेट याद कर रहे हैं असेंबली संदर्भ, गोटो परिभाषा आपको वास्तविक कोड परिभाषा पर ले जाएगी। असेंबली संदर्भ के साथ यह आपको जेनरेट किए गए मेटाडेटा हस्ताक्षर पर ले जाएगा।
  • सभी संदर्भ खोजें: संदर्भ के उपयोग के लिए परियोजना संदर्भों में सभी कोड संसाधित करेंगे। एक विधानसभा संदर्भ के लिए आप केवल मेटाडाटा के भीतर का उपयोग करता है देखेंगे
  • शीघ्र खोज (2010 केवल): सभी संदर्भों को खोजने के लिए, बस अपने विपक्ष के लिए एक पी 2 पी संदर्भ

में बेहतर काम करता है जवाब में इसी प्रकार के

  • हां: एक प्रोजेक्ट लोड करना आमतौर पर संदर्भ लोड करने से धीमा होता है।परियोजनाओं की उचित मात्रा के साथ हालांकि इस बार अंतर महत्वपूर्ण नहीं है और आपके दैनिक विकास दिनचर्या को प्रभावित नहीं करना चाहिए
  • हां: समाधान में एक परियोजना जोड़ने जोड़ना आम तौर पर एक संदर्भ जोड़ने से धीमा है। अंतर हालांकि सेकंड में है और एक बार लागत है। मुझे लगता है कि मानदंडों के हिस्से के रूप में इसे समझना गलती है।
+0

में समाप्त हो सकते हैं, मैं सहमत हूं कि विपक्ष शायद ही कभी विपक्षी हैं, लेकिन ये अंक उठाए गए हैं दूसरे शिविर द्वारा मैंने निष्पक्षता के लिए नोट किया। –

+4

मैं गलत हो सकता था, लेकिन ऐसा लगता है कि एक परियोजना जोड़ना एक बार की लागत नहीं है। प्रत्येक अतिरिक्त परियोजना पूरी तरह से समाधान के संकलन समय को बढ़ाती है। –

2

ठीक है, अगर आप किसी भी प्रकार के स्रोत नियंत्रण का उपयोग कर रहे हैं तो आप दोनों शिविरों को पूरा कर सकते हैं। ब्रांचिंग या लेबलिंग का उपयोग करना (आपके स्रोत नियंत्रण के आधार पर)।

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

जब भी आपकी सामान्य नियंत्रण टीम एक नया स्थिर निर्माण बनाता है तो आप नई शाखा से खींचने के लिए अपने स्रोत संदर्भ अपडेट कर सकते हैं।

इस परिदृश्य के लिए दूसरी ओर यह है कि आप सामान्य कोड पर एक पैच प्राप्त कर सकते हैं ताकि वर्तमान चल रहे विकास प्रयासों के साथ गड़बड़ न हो। बेशक यह आवश्यक जगह पर एक से अधिक स्थानों में सामान्य कोड को अद्यतन करने का एक अतिरिक्त प्रबंधन बोझ जोड़ता है।

+0

यह एक तर्क है जिसे मैंने भी बनाया है और नोट करना भूल गया है। उसे लाने के लिए धन्यवाद। –

0

को संदर्भित रणनीति हमेशा एक आम समस्या

होगा मुझे पता है यह एक बहुत पुरानी सवाल यह है, लेकिन यह हमेशा सापेक्ष जवाब के साथ एक प्रासंगिक सवाल हो जाएगा और मैं कुछ साल पहले यह एक ही सवाल के बारे में याद और दो विकल्पों का प्रभाव (प्रोजेक्ट बनाम असेंबली संदर्भ) पिछले दो वर्षों के दौरान केवल मेरे लिए स्पष्ट हो गया था, जबकि मैं एक एकल डब्ल्यूपीएफ ऐप के लिए 300+ समाधानों में 800+ परियोजनाओं के साथ एक सिस्टम के लिए एक निर्माता के लिए पूर्णकालिक काम कर रहा था।

प्रोजेक्ट संदर्भ दृश्य स्टूडियो के लिए आदर्श है क्योंकि आप अपने कोड के विवरण में आईडीई और अधिक जानकारी देने के क्योंकि आप स्पष्ट रूप से दृश्य स्टूडियो कह रहे हैं

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

असेंबली संदर्भ पैमाने बेहतर

अपने सिस्टम 200 परियोजनाओं से भी ज्यादा बड़ा है, तो आपके बनाता है बहुत धीमी गति से हो सकता है कर सकते हैं। मैंने प्रति निर्माण 20 मिनट देखा है और वास्तव में बेकार है। इसलिए यदि आप एक डीएलएल का संदर्भ दे सकते हैं जो नहीं बदलता है, तो आप इसे बनाने के लिए विजुअल स्टूडियो "नहीं" बता रहे हैं, और इसका स्पष्ट रूप से निर्माण के समय पर कुछ प्रभाव पड़ता है।

सभा संदर्भ एक decoupled प्रणाली

परियोजना संदर्भ का भ्रम कुछ अन्य बनाते हैं तो आप एक समझदारी भरा आईडीई हमेशा जानता है कि कहाँ और कैसे कई स्थानों में एक प्रकार प्रयोग किया जाता है, जहां कोड पाया जा सकता है प्रदान करते हैं, और उपयोगी आंकड़े क्योंकि सभी परियोजनाओं को सीधे संदर्भित किया जाता है। जब आप अनजाने में एक परिपत्र संदर्भ बनाने की कोशिश करते हैं तो यह आपको चेतावनी भी दे सकता है।विधानसभा संदर्भ की

पेशेवरों:

  1. बाहरी निर्भरता, आप छोटे समाधान और संबंधित परियोजनाओं के छोटे समूहों बना सकते हैं के रूप में कुछ परियोजनाओं के इलाज करके, क्योंकि असंबद्ध प्रोजेक्ट बाहरी विधानसभाओं के रूप में इलाज कर रहे हैं
  2. दृश्य की अनुमति देता है स्टूडियो बहुत बड़े मॉड्यूलर सिस्टम को अच्छी तरह से संभालने के लिए।
  3. बिल्ड प्रक्रिया के दौरान आपको एक डीएल/असेंबली स्टेजिंग रणनीति तैयार करने के लिए मजबूर करता है।

विधानसभा संदर्भ के नुकसान:

  • परिपत्र संदर्भ संभव हो, और अपने कम अनुभवी डेवलपर्स शुरू में उन संदर्भों को नोटिस नहीं होगा।

    आप वृत्तीय संदर्भ की इस चुनौती के चारों ओर एक तीसरे पक्ष के विधानसभा कि अपनी में जाँच के रूप में अपने विधानसभाओं में से एक का इलाज, यह अगले संस्करण पर ले जाने के लिए, और यह पिछले निर्माण करके प्राप्त कर सकते हैं। जब कोई ऐसी परियोजना पर असफल हो जाती है जो इस बहिष्कृत असेंबली का उपयोग करती है तो आप उस नामांकित परियोजना का पुनर्निर्माण करने का निर्णय ले सकते हैं और अक्सर परिपत्र निर्भरता को मालिश करते हैं। (अनुशंसित नहीं, लेकिन यह संभव है)

  • ऊपर की ओर ढांचे संदर्भ संभव हो के रूप में अच्छी तरह से है क्योंकि आप DLLs है कि एक उच्च .नेट फ्रेमवर्क के खिलाफ संकलित किए जाते हैं के लिए संदर्भ जोड़ने के लिए, और विजुअल स्टूडियो आप स्पष्ट मूल कारण संदेशों नहीं देता जब ऐसा होता है तो आप समस्या को ठीक करने के लिए कई चीजों का प्रयास करेंगे और फ्रेमवर्क संस्करणों को ठीक करने के लिए कई बार विफल हो जाएंगे।

    नई परियोजनाएं नेट फ्रेमवर्क के नवीनतम संस्करण में डिफ़ॉल्ट हैं, इस तथ्य पर विचार नहीं करते कि वर्तमान समाधान में सभी परियोजनाएं अभी भी .NET के पुराने संस्करण में हैं, इसलिए जब आप एक असेंबली का उपयोग करके उस प्रोजेक्ट का संदर्भ जोड़ते हैं संदर्भ, आप अक्सर एक अजीब त्रुटि प्राप्त करेंगे जो पता लगाने में इतना आसान नहीं है।

  • क्रॉस-शाखा संदर्भ भी संभव हो गए हैं क्योंकि आप शायद एक ही समय में एक से अधिक शाखाओं में काम कर रहे हैं, और कभी-कभी संदर्भ जोड़ने के दौरान भ्रमित हो जाते हैं।

    आप "संदर्भ जोड़ें" पर क्लिक करें, कुछ निर्देशिकाएं नीचे जाएं, कुछ निर्देशिकाएं नीचे जाएं, डीएलएल का चयन करें और यह महसूस किए बिना जोड़ें कि डीएल वास्तव में बहुत दूर और दूसरी शाखा में है जो आप काम कर रहे हैं पर। यह समस्या केवल तब ही स्पष्ट हो जाएगी जब निर्माण सर्वर उस असेंबली को हल करने का प्रयास करता है और विफल रहता है। और त्रुटि "अज्ञात नेमस्पेस, क्या आप असेंबली संदर्भ खो रहे हैं?" आपकी पूरी टीम के समय को बर्बाद करने में आपकी मदद नहीं करेगा।