我正在按照最佳做法(最佳说明here)开发Magento 2 CRUD功能。在我正在研究的项目中,我们正在使用PHPMD(php混乱检测器)。在其他规则中,我们将CBO限制设置为13(我知道这是默认值)。我的存储库正在实现get
,save
,getList
,delete
,deleteById
方法,限制已为12。
如果我需要在不重叠PHPMD CBO限制的情况下向此存储库添加其他方法,那是最佳实践?
P.S。我认为在其他框架/平台中的实现也可能是这种情况,与Magento 2并不严格相关。
答案 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]);
}
}