【问题标题】:PHP models : one or more setters by database action?PHP 模型:一个或多个通过数据库操作的设置器?
【发布时间】:2016-08-15 01:51:24
【问题描述】:

我在 CodeIgniter PHP 项目中使用 MVC 模式,我想知道构建模型方法的最佳方式是什么,以确保代码的可读性和可扩展性。

简而言之,这样做更好吗? :

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
}

或者也许是另一种方式?
另外,在这种情况下,函数命名是否有好的做法?

【问题讨论】:

    标签: php codeigniter model-view-controller model naming


    【解决方案1】:
    function set_account_state($state) 
    

    当你只有一个任务,那就是改变状态时,这会更好。 但是,如果将来您可能需要在更改帐户状态之前执行不同的任务,那么您需要三种不同的方法。 您仍然可以使用原始方法来更改帐户状态并从您的三个方法中调用它。

    函数命名应包括一个带名词的动词,以使其更清晰。 function pending_account() 不是很清楚,function keep_account_pending() 是我觉得更好的命名方式。

    【讨论】:

    • 我同意这个答案。帐户状态管理应在一个地方。 $state 的有效值可以由常量提供服务,从而提高可读性和对参数值应该/可能是什么的理解。这并不意味着您不能或不应该在类中创建私有或受保护的“帮助”函数来处理每个特定状态。但是公共接口应该是一个单一的功能。
    【解决方案2】:

    在我看来,第二种方式更好。

    使用表明方法将做什么的名称可以提高代码的可读性。

    随着代码变得越来越大,很容易忘记什么数字代表什么状态。名称不会发生这种情况,因为名为 reject_account() 的方法将表明帐户将被拒绝,而不是作为参数传递给函数的数字。

    此外,当其他人处理您的代码时,他们将更容易理解调用方法时发生的情况。话虽如此,最好了解当看到accept_account() 的方法时接受客户帐户,然后看到set_account_state(1)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多