2012-12-28 13 views
5

मैं सिर्फ यह जानना चाहता हूं कि प्रदर्शन और सर्वोत्तम प्रथाओं के संदर्भ में निम्न में से किन दृष्टिकोण की अनुशंसा की जाती है। क्या कोई प्रदर्शन अंतर है?सी # गहरी एक्सेसिंग ऑब्जेक्ट्स प्रदर्शन

if (objA.objB.objC.objD.objE != null) 
{ 
    objX.var1 = objA.objB.objC.objD.objE.prop1; 
    objX.var2 = objA.objB.objC.objD.objE.prop2; 
    objX.var3 = objA.objB.objC.objD.objE.prop3 + objA.objB.objC.objD.objE.prop4; 

    ...... 
    ...... 
} 

or 

var objonlyE = objA.objB.objC.objD.objE 
if (objonlyE != null) 
{ 
    objX.var1 = objonlyE.prop1; 
    objX.var2 = objonlyE.prop2; 
    objX.var3 = objonlyE.prop3 + objonlyE.prop4; 
    ...... 
    ...... 
} 
+0

शायद प्रदर्शन अंतर लेकिन यह unnoticeable है। – mdcuesta

+0

यह एक बुरी डिज़ाइन है जो कहने के लिए खेद है :( – paritosh

+0

क्या आप जानते हैं कि कंपाइलर को गुणों के लिए सीधा पहुंच पथ मिलेगा? –

उत्तर

0

दूसरा है बस अधिक आसान उपयोग करने के लिए ... तो, बेहतर है क्योंकि आप अपने कोड को बार-बार बार दोहराने नहीं है ...

0

मैं दूसरा दृष्टिकोण पसंद करते हैं, यह बहुत अधिक है पठनीय। प्रदर्शन के संदर्भ में यह अनजान होना चाहिए, जो नियमित चर/गुणों के मामले में है। यदि गुणों के तहत छिपे हुए कुछ प्रदर्शन भारी संचालन हैं तो आपको दूसरे संस्करण का भी उपयोग करना चाहिए क्योंकि यह तेज़ होगा।

3

प्रदर्शन इसमें नहीं आता है, क्योंकि संपत्ति का उपयोग तेजी से होने जा रहा है (और यदि यह नहीं है, तो यह एक ही क्रम में समान गुणों तक पहुंचने पर थोड़ा अंतर बनाता है)।

रखरखाव और पठनीयता समस्याएं हैं और उस संबंध में, आपका दूसरा विकल्प बहुत बेहतर है।

Law of Demeter के बारे में पढ़ें:

Demeter के कानून (लोद) या सिद्धांत कम से कम का ज्ञान सॉफ्टवेयर के विकास के लिए एक डिजाइन दिशानिर्देश है, विशेष रूप से वस्तु उन्मुख कार्यक्रम। अपने सामान्य रूप में, एलओडी ढीला युग्मन का एक विशिष्ट मामला है।

+0

हां, लेकिन ... क्यों पूछे जा रहे प्रश्न का उत्तर नहीं देते: सी #/.NET में, सामान्य उप-संपीड़न संकलक द्वारा समाप्त नहीं होते हैं, इसलिए उन्हें हमेशा हाथ से हटा दिया जाता है परिणाम एक स्पीड-अप में होते हैं। क्या स्पीड-अप पता लगाने योग्य है एक अलग सवाल है। –

+0

@romkyns - बिल्कुल। spe edup (?) यहां मुद्दा नहीं है। मैं पहले दृष्टिकोण के साथ मौजूद चमकदार बड़े मुद्दों को इंगित करता हूं। और, आप कभी नहीं जानते कि कंपाइलर का भविष्य संस्करण उप-अभिव्यक्तियों को खत्म करने में सक्षम नहीं होगा ... – Oded

+0

@ ओडेड मुझे संदेह है कि भविष्य का संस्करण ऐसा करेगा, खासकर यदि वे गुण हैं और फ़ील्ड नहीं हैं। (व्यक्तिगत रूप से, मैं नहीं चाहता कि ऐसा होना चाहिए) –

6

दूसरा एक बेहतर है क्योंकि आप कभी नहीं जानते कि '' 'के पीछे क्या छिपा रहा है। यह एक डेटाबेस कॉल या कुछ अन्य महंगा ऑपरेशन हो सकता है।

0

दूसरा दृष्टिकोण में आप एक मुट्ठी एक आप निम्नलिखित गलती कर सकता है, उदाहरण के लिए प्रोग्रामर गलतियों के लिए कम जगह है:

objX.var1 = objA.objB.objC.objD.objE.prop1; 
objX.var2 = objA.objB.**objU**.objD.objE.prop2; 
वहाँ
संबंधित मुद्दे