PHPMD и классы связи между объектами (CBO) - PullRequest
0 голосов
/ 05 июня 2019

Я работаю над функциональностью CREN в Magento 2, следуя лучшим рекомендациям (лучше всего описано здесь ).В проекте, над которым я работаю, мы используем PHPMD (детектор php-сообщений).Среди других правил у нас установлен лимит CBO 13 (который, как я понимаю, используется по умолчанию).Мой репозиторий реализует методы get, save, getList, delete, deleteById, а предел уже составляет 12.

Что было бы лучше, если мне нужно добавить другие методыв этот репозиторий, не перекрывая лимит PHPMD CBO?

PS Я думаю, что это может иметь место и для реализаций в других средах / платформах, не строго связанных с Magento 2.

1 Ответ

0 голосов
/ 05 июня 2019

Это одно из величайших правил, которое помогает сфокусировать ваши занятия и облегчить их обслуживание. Сколько раз вы видели это:

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]);
    }
}
...