我最近开始使用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种公共方法)
答案 0 :(得分:1)
你基本上有两个不同的功能 - 所以我就是这样做的
public function getAll()
{
return $this->model->all();
}
public function getOnlyActive()
{
return $this->model->where('active', true)->get();
}
注意函数名称 - getAll()
就是这样 - 所有记录,没有例外。 getOnlyActive()
正是这样 - 只有活动记录 - 该函数名称中没有“全部”,因为它没有“全部”。