PHPMD和对象类之间的耦合(CBO)

时间:2019-06-05 07:28:58

标签: php magento2 phpmd

我正在按照最佳做法(最佳说明here)开发Magento 2 CRUD功能。在我正在研究的项目中,我们正在使用PHPMD(php混乱检测器)。在其他规则中,我们将CBO限制设置为13(我知道这是默认值)。我的存储库正在实现getsavegetListdeletedeleteById方法,限制已为12。

如果我需要在不重叠PHPMD CBO限制的情况下向此存储库添加其他方法,那是最佳实践?

P.S。我认为在其他框架/平台中的实现也可能是这种情况,与Magento 2并不严格相关。

1 个答案:

答案 0 :(得分:0)

这是最重要的规则之一,有助于使您的课程保持专注并易于维护。您看到过多少次:

class XXXRepository
{
    public function findOneByCode($code);
    public function findOneByParams($params);
    public function findAllByParams($params);
    public function findActive($params);
    public function findForProductList($params);
    ... 5000 lines of spaghetti
}

为此,请拥抱接口,使您的应用程序依赖于抽象而不是实现细节:

interface ProductByCode
{
    public function findByCode(string $code): ?Product;
}

interface ProductsByName
{
    public function findByName(string $name): array;
}

使用Dependency Injection组件,您可以为其实现的接口加上别名。为每个接口去实现。您可以使用抽象类,该类将帮助您通过选择的框架与持久层进行通信。

final class ProductByCodeRepository extends BaseRepository implements ProductByCode
{
    public function findByCode(string $code): ?Product
    {
        return $this->findOneBy(['code' => $code]);
    }
}