2010-05-31 15 views
11

सबसे अच्छा अभ्यास क्या है? फ़ंक्शन को कॉल करें, फिर यदि आप किसी चीज़ के लिए परीक्षण करते हैं, या किसी चीज़ के लिए परीक्षण करते हैं तो वापस कॉल करें?यह जांचना बेहतर है कि इसके अंदर या बाहर किसी फ़ंक्शन की आवश्यकता है या नहीं?

मैं फ़ंक्शन के अंदर परीक्षण पसंद करता हूं क्योंकि यह आसान कार्यों को देखने के लिए आसान बनाता है।

उदाहरण के लिए

:

if (!context.Request.HttpMethod.ToString().Equals("GET", StringComparison.OrdinalIgnoreCase)) 
      { 
       // if not a GET method cancel url cosmetics 
       return; 
      }; 

या कि परीक्षण Application_BeginRequest में किया जाना चाहिए:

protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      this.FixURLCosmetics(); 
     } 

और

private void FixURLCosmetics() 
     { 
      HttpContext context = HttpContext.Current; 
      if (!context.Request.HttpMethod.ToString().Equals("GET", StringComparison.OrdinalIgnoreCase)) 
      { 
       // if not a GET method cancel url cosmetics 
       return; 
      }; 

      string url = context.Request.RawUrl.ToString(); 
      bool doRedirect = false; 

      // remove > default.aspx 
      if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase)) 
      { 
       url = url.Substring(0, url.Length - 12); 
       doRedirect = true; 
      } 

      // remove > www 
      if (url.Contains("//www")) 
      { 
       url = url.Replace("//www", "//"); 
       doRedirect = true; 
      } 

      // redirect if necessary 
      if (doRedirect) 
      { 
       context.Response.Redirect(url); 
      } 
     } 

यह अच्छा है?

बेहतर क्या है?

thnx

+1

+1 मैं सिर्फ उसी प्रश्न पर विचार कर रहा था ... –

+0

हे, मैं इसे पोस्ट करने के लिए अनिश्चित था या नहीं, लेकिन मैं विजुअल स्टूडियो में पूरी तरह से नई परियोजना पर काम कर रहा हूं और सबकुछ के लिए सर्वोत्तम अभ्यास करना चाहता हूं मैं उपयोग करता हूं (और मेरे पास इस समय का समय है, तो क्यों नहीं), इसलिए मैंने सोचा कि क्या नरक है): पी और आप लोग सवालों का जवाब पसंद करते हैं :) – b0x0rz

+3

न तो - आपको आईआईएस में यूआरएल रिवाइट मॉड्यूल का उपयोग करना चाहिए। – Jon

उत्तर

11

मैं परीक्षण की तरह महसूस अंदर समारोह बेहतर है। यदि आप फ़ंक्शन के बाहर परीक्षण करते हैं, तो आपको हर जगह परीक्षण करना होगा कि फ़ंक्शन को कॉल किया जा सकता है (और बहुत सारे डुप्लिकेट कोड का कारण बनता है)।

यह सब कुछ एक ही स्थान पर है और फिर हर जगह फैलाना अच्छा है।

+0

मैं इसे एक से अधिक स्थानों से उपयोग करते समय मामले के बारे में सोचना भूल गया, इसलिए thnx :) – b0x0rz

+0

+1 मैं कोड डुप्लिकेशंस तर्क के आधार पर वही करता हूं - हालांकि, फ़ंक्शन कॉल से पहले मुझे अक्सर परीक्षण मिलता है .. –

6

यदि किसी विधि को अपने फ़ंक्शन को निष्पादित करने से पहले एक निश्चित शर्त को पूरी तरह से पूरा करने की आवश्यकता होती है तो हाँ, आपको उस फ़ंक्शन के अंदर सत्यापन रखना चाहिए। यदि, दूसरी तरफ, आपका कॉलिंग कोड कह रहा है "केवल इस परिचालन के तहत इस ऑपरेशन को निष्पादित करें" तो कॉलिंग कोड में स्थिति बेहतर है, क्योंकि अगली बार जब आप उस विधि को कॉल करना चाहते हैं तो आप उस स्थिति को शामिल नहीं करना चाहेंगे ।

+0

+1 अच्छा तर्क –

+0

को दो बार फिर से पढ़ना पड़ा, लेकिन हाँ यह समझ में आता है! – b0x0rz

2

इस मामले में, मुझे लगता है कि फ़ंक्शन का नाम इंगित करता है कि प्रत्येक मामले में यूआरएल के साथ कुछ होने वाला है। कोई भी गैर-जीईटी पृष्ठ पर FixURLCosmetics पर कॉल करना चाहता है और कुछ होने की उम्मीद है।

मैं FixURLCosmeticsFixGETURLCosmetics का नाम बदलूंगा। फिर, अगर एक गैर-जीईटी पृष्ठ पर कहा जाता है तो अपवाद फेंक दें।

+0

मुझे वह विचार भी पसंद है :) अच्छा। धन्यवाद। – b0x0rz

0

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

इस मामले में, आसान एपीआई जैसे एपीआई सरल घटकों को मज़बूत कर सकते हैं।

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

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