2016-04-21 60 views
1

我在CodeIgniter PHP項目中使用MVC模式,我想知道爲了確保代碼和可伸縮性的可讀性,構建模型方法的最佳方法是什麼。PHP模型:一個或多個setter通過數據庫操作?

總之,這樣做更好嗎? :

public function set_account_state($new_state) { 
    // UPDATE a database record state to $new_state [0, 1 or 2] 
} 

或者這個? :

public function reject_account() { 
    // UPDATE a database record state to 0 
} 

public function accept_account() { 
    // UPDATE a database record state to 1 
} 

public function pending_account() { 
    // UPDATE a database record state to 2 
} 

或者也許另一種方式?
另外,在這種情況下,是否有一個良好的函數命名實踐?

回答

3
function set_account_state($state) 

當你只有一個任務,那就是改變狀態,這會更好。 但是,如果將來您可能必須在更改帳戶狀態之前執行不同的任務,那麼您需要三種不同的方法。 您仍然可以使用原始方法來更改帳戶的狀態並從三種方法中調用它。

功能命名應該包括一個動詞與名詞,使其更清晰。 函數pending_account()不是那麼清楚,函數keep_account_pending()是我覺得一個更好的方式來命名它。

+0

我同意這個問題。帳戶狀態管理應該在一個地方。 '$ state'的有效值可以由常量提供服務,從而提高可讀性並理解參數值應該/可能是什麼。這並不意味着你不能或不應該在類中創建私有或受保護的「幫助」函數來處理每個特定的狀態。但公共接口應該是一個單一的功能。 – DFriend

2

在我看來,第二種方法是更好的方法。

使用名稱表明該方法可以提高代碼的可讀性。

隨着代碼越來越大,很容易忘記代表什麼狀態的數字。這種情況不會發生在名稱上,因爲名爲reject_account()的方法將指示該帳戶將被拒絕得更好,然後將數字作爲參數傳遞給函數。

此外,當其他人工作在您的代碼上時,他們會更容易理解調用方法時發生了什麼。話雖如此,最好理解客戶賬戶被接受,當人們看到accept_account()的方法,然後看到set_account_state(1)

相關問題