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

PHPMD and Coupling Between Object classes (CBO)

我正在按照最佳实践(最佳描述 here)开发 Magento 2 CRUD 功能。在我正在处理的项目中,我们使用的是 PHPMD(php 混乱检测器)。在其他规则中,我们将 CBO 限制设置为 13(我知道这是默认设置)。我的存储库正在实施 getsavegetListdeletedeleteById 方法并且限制已经是 12。

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

P.S。我认为其他 frameworks/platforms 中的实现也可能是这种情况,与 Magento 2 没有严格关系。

这是最重要的规则之一,有助于让您的 classes 保持专注并更易于维护。你看过多少次了:

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;
}

使用依赖注入组件,您可以为其实现指定一个接口的别名。去实现每个接口。您可以使用抽象 class,这将帮助您通过您选择的框架与持久层进行通信。

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