2012-07-12 21 views
6

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

मैं इस और अधिक हाल ही में इसमें भाग रहा हूं, और यह सोच रहा था कि क्या आपकी विधियों का निर्माण करने के लिए सबसे अच्छा अभ्यास या कम से कम अच्छा डिज़ाइन मानक था।

स्पष्ट विकल्प है कि मैं देख रहा हूँ इस प्रकार, प्रत्येक

  • एकाधिक तरीकों के लिए एक छोटी सी उदाहरण के साथ-साथ हैं:

    this.makeGetRequest = function(controller){...} 
    this.makeSynchronousGetRequest = function(controller){...} 
    this.makePostRequest = function(controller, data){...} 
    
  • एक विधि है, और अधिक पैरामीटर के साथ:

    //data would be an optional parameter 
    // this.makeRequest("friends", "GET", true); 
    // this.makeRequest("friends", "POST", false, newFriend); 
    this.makeRequest = function(controller, type, isSynchronous, data){...} 
    
  • एक विकल्प पैरामीटर के साथ एक विधि:

    this.makeRequest = function(controller, type, options); 
    this.makeRequest("friends", "POST", {data:newFriend, isSync:false}); 
    

HTTP अनुरोध उदाहरण सिर्फ सवाल प्रेरित है, लेकिन इस अनुकूलन/चर की मात्रा के साथ किसी भी सार्वजनिक संपर्क वाले समारोह के लिए काम करता है।

सभी तीन स्पष्ट रूप से कार्यात्मक हैं। लेकिन क्या अच्छा अभ्यास है? क्या कोई मानक, या दिशानिर्देश है जिसका पालन किया जाता है?

उत्तर

2

options पैरामीटर का लाभ यह है कि यह स्पष्टता बलिदान के बिना असीमित विकल्प की अनुमति देता है। जब कोई data: या isSync: निर्दिष्ट करता है तो यह स्पष्ट रूप से स्पष्ट होता है कि सेटिंग्स क्या भर रही हैं। false पर फ़ंक्शन में 13 वें पैरामीटर को सेट करना याद रखना भ्रम के लिए एक नुस्खा है।

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

पैरामीटर के विरुद्ध एकाधिक विधियों के बारे में कैसे? एकाधिक विधियों के साथ शुरू करने का एक विकल्प केवल तब होता है जब आपके पास छोटी संभावनाएं होती हैं (बनाम पोस्ट करें, उपयोग करें डिफ़ॉल्ट बनाम DontUseDefaults, या जो भी हो)।इसके बारे में सोच रही थी, मैं सेटअप अलग तरीकों की संभावना कर रहा हूँ केवल जब:

  1. भेद अत्यधिक महत्वपूर्ण है (एक तुल्यकालिक अनुरोध एक अतुल्यकालिक अनुरोध से मौलिक रूप से अलग बर्ताव करता है और मैं डेवलपर होशपूर्वक चुनने जो लागू करना चाहते हैं (। जबकि इसके विपरीत जीईटी बनाम पोस्ट आपके अनुरोध की सिर्फ एक और संपत्ति है - यदि आप गलत करते हैं तो यह सौदा-ब्रेकिंग निर्णय नहीं है।)

  2. अन्य विकल्प भी नहीं हैं जिन्हें आप चाहेंगे वैसे भी सेट करें। अगर मुझे पहले याद रखना है कि foo.get() या foo.post() और पर कॉल करना है या नहीं options ऑब्जेक्ट भरने के लिए सदस्य, मैं आपको दो अलग-अलग स्थानों में निर्णय लेने के लिए मजबूर कर रहा हूं। मैं एक ही स्थान पर सभी सेटिंग्स की बजाय होगा।

1

जाहिर है एकाधिक विधियों के साथ आपको कुछ प्रकार के अमूर्त सुपरमॉइड की आवश्यकता होगी, अन्यथा आप खुद को दोहराएंगे, जिसे बुरा माना जाता है, हालांकि कभी-कभी ऐसा करने के लिए अच्छा होता है उपनाम या shorthands (यानी देख jQuery $.getJSON() एक संशोधित $.ajax() -Call के लिए) अधिक पैरामीटर साथ

एक विधि वास्तव में लचीला यदि आप spechial-केस या वैकल्पिक पैरामीटर की एक बहुत कुछ है, इस तरह के आप एक का उपयोग करेंगे के लिए नहीं है विकल्प ऑब्जेक्ट जैसा आपने अपने तीसरे उदाहरण में उल्लेख किया है।

यह वास्तव में उपयोग के मामले और आवश्यक लचीलापन/पुन: प्रयोज्यता के लिए आता है। व्यक्तिगत रूप से मैं विकल्प विधि पैरामीटर दृष्टिकोण के साथ हमेशा एक विधि के साथ जाऊंगा।

1

कैसे अधिकतम लचीलेपन के लिए json विकल्पों के साथ एक "supermethod" होने, और फिर शायद अधिक सख्ती से परिभाषित मानकों के साथ कुछ आवरण तरीकों सबसे अधिक इस्तेमाल किया कार्यक्षमता के लिए आसान पहुँच के लिए के बारे में।