2012-07-12 68 views
6

這個問題來自javascript的角度,但它肯定可以應用於其他語言。何時使用 - 多種方法,多個參數或選項參數

我最近遇到了這個問題,想知道是否有一個最佳實踐,或者至少是一個好的設計標準,以及如何構建您的方法。

,我看到如下,爲每個

  • 多種方法一個簡單的例子沿着明顯的選擇:

    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:時,很明顯顯示什麼設置正在填充。記住將函數中的第13個參數設置爲false是混淆的祕訣。因此,在最後兩個選項之間,我只在以下情況下使用多個參數:(1)總共少於四個參數;(2)序列合乎邏輯且易於記憶(URL,然後鍵入數據;然後數據),(3)不超過一個(最後一個)是可選的。無論如何,這是一個經驗法則。

多種方法與參數化有何關係?多種方法只是一種選擇,當你有少量的可能性時(GET與POST,UseDefaults與DontUseDefaults,或其他)。關於它的思考,我可能設置單獨的方法,只有當:

  1. 的區別是非常重要的(同步請求的行爲從一個異步請求本質上的區別,我想開發商有意識地選擇要應用(。而GET和POST只是你的要求的一個屬性 - 如果你做錯了,這不是一個終結所有的,破壞性的決定。)

  2. 有沒有其他的選擇,你會希望如果我首先必須記住是否調用foo.get()或foo.post()然後重新設置成員填寫options對象無論如何,我只是強迫你在兩個不同的地方作出決定。我寧願將所有設置都放在一個地方。

1

很明顯用多種方法你需要有某種抽象的supermethod他們會打電話,否則你會重複自己,這被認爲是不好的,但有時很高興有這樣的方法別名或簡寫(參見,即jQuery的$.getJSON()的修改$.ajax() - 呼叫)與多個參數

一種方法是不是真的靈活,如果你有很多spechial情況或可選參數,這樣你會使用一個選項對象,就像你在第三個例子中提到的那樣。

這真的歸結爲用例和所需的靈活性/可重用性。 就我個人而言,我會一直用一種方法,用選項參數的方法。

1

一下怎麼樣「supermethod」與最大的靈活性json的選項,然後也許更嚴格定義參數的一些包裝方法可以很方便地訪問最常用的功能。