避免$ onlyActive布尔参数

时间:2014-06-20 10:05:41

标签: php methods laravel-4 boolean

我最近开始使用phpmd来检测错误的编码实践并修复它们。我的项目使用Laravel 4 php框架,我实现了一个存储库模式。

所以我有一个名为EloquentProductRepository的类,它与我数据库中的产品表进行交互。像all()方法这样的方法有一个名为$onlyActive的布尔参数。如果为true,则仅获取活动产品,否则返回所有产品。

Phpmd告诉我,布尔参数是违反单一责任模式的某种标志。所以我做了一些阅读并同意应该避免使用布尔值。现在我的问题是我应该如何在可维护性,可读性和可扩展性方面进行重构?

该方法相当简单,如下所示

/**
 * Fetches all products
 *
 * @param boolean $onlyActive Flag for only returning active products
 * @return Collection
 */
public function all($onlyActive = true)
{
    if ($onlyActive)
    {
        return $this->model->where('active', true)->get();
    }

    return $this->model->all();
}

我看到2个选项。一个是使用$ options数组而不是键'include_inactive'。另一种选择是创建2种方法。 all()allWithInactive()。我目前有3个方法使用$ onlyActive布尔值,所以最后一个选项会为我的类添加3个方法,这可能会使类在方法上相当大。 (phpmd喜欢课程不超过10种公共方法)

1 个答案:

答案 0 :(得分:1)

你基本上有两个不同的功能 - 所以我就是这样做的

public function getAll()
{
    return $this->model->all();
}


public function getOnlyActive()
{
    return $this->model->where('active', true)->get();
}

注意函数名称 - getAll()就是这样 - 所有记录,没有例外。 getOnlyActive()正是这样 - 只有活动记录 - 该函数名称中没有“全部”,因为它没有“全部”。