2011-07-26 44 views
0

在編寫CRUD MVC應用程序時,您會在爲業務層(模型)編寫api時建議使用數組而不是長(甚至是短)參數列表嗎?在爲MVC應用程序設計API時,使用數組而不是參數列表更好嗎?

例如,你有什麼建議,其中:

// Posts::getPosts(20, 0, $category, 'date_added'); 
static function getPosts($limit = NULL, $offset = NULL, Model_Category $category = NULL, $sort_by = NULL); 

// Posts::getPosts(array('limit' => 20, 'offset' => 0, 'category' => $category, 'sort_by' => 'date_added')); 
static function getPosts(array $options = NULL);` 

1似乎有很多清潔,不易發生錯誤,但2似乎WAY更靈活(可以輕鬆添加/切換參數,而無需更改api)。只是尋找理由去任何方式。

感謝

回答

1

我去這個憑經驗:

如果

  • 有超過5個參數
  • 存在的論據沒有邏輯順序
  • 沒有一個清晰的邏輯相關性參數之間
    和/或
  • 大部分參數是可選的

然後它是可能一個好主意,使用數組模擬關鍵字參數。否則,只需使用標準參數即可。

此外,請考慮使用parameter object來執行復雜的方法調用。

編輯:我該怎麼做?

public static function search(
    $keywords, 
    $limit = NULL, 
    $offset = NULL, 
    Model_Post_Type $type = NULL, 
    Model_Category $category = NULL 
) 

好,具有參數數組(也稱爲關鍵字參數在支持他們,像Python語言),我的個人喜好將做到這一點:

public static function search($keywords, $options = array()) { 
    $default_options = array(
    'limit' => NULL, 
    'offset' => NULL, 
    'post_type' => NULL, 
    'category' => NULL 
); 
    extract(array_merge($default_options,$options)); 
    // search logic, using $keywords, $limit, $offset, $post_type, $category 
} 

這給你一個數好處:

  • $options中的任何內容都是完全可選的。任何必需的參數都應該是參數。
  • 使您完全控制這些選項的默認值,甚至允許在數組初始值設定項中使用複雜的表達式。
  • 允許您稍後添加新的(可選)搜索選項,同時與現有代碼保持向後兼容。
  • extract()將鍵 - 值對變爲可變值對,因此該方法的其餘部分完全忽略了使用參數數組而不是普通參數的事實。
+0

我很好奇你會用這個做什麼... – BDuelz

+0

public static function search($ keywords,$ limit = NULL,$ offset = NULL,Model_Post_Type $ type = NULL,Model_Category $ category = NULL)' – BDuelz

+0

請記住,未來可能會有額外的參數,對結果進行排序等。 – BDuelz

4

只需一個陣列,那個誰將會嘗試調用你的方法不知道哪個參數(S),預計。
而他的IDE將無法幫助...

=>他將不得不閱讀文檔 - 這需要時間。


在另一方面,與第一個解決方案,只是希望在方法的聲明(和我的IDE不顯示,當我輸入法的名稱),我知道什麼參數,它預計。


我同意你的第二個解決方案(命名參數數組)的方式更加靈活。

但是,特別是當只有少數參數時,我傾向於選擇第一個參數 - 只是出於我寫的原因。

1

這可能取決於你需要什麼。你使用的參數是否有邏輯順序?沒有另一個不適用嗎?它並不是一切都是一對一的。

由於這種情況的性質,單獨的參數可能是最好的路線。然而,我會建議的一件事是它提供更有用的默認值。

相關問題