Как DRY дополнительная функция приложения в контексте Laravel - PullRequest
1 голос
/ 11 марта 2020

Например, у нас есть две функции: группы доступа, целевые группы, и в будущем могут быть добавлены другие. Также у нас есть сущность Company, к которой относится сущность User 1: M (Company to User).

Таким образом, в разных местах кодовой базы нам нужно проверить, включены ли некоторые из этих функций для Company (а также для User) : в классах запросов, классы запросов (т. е. репозитории, запросы или даже модели зависят от вашего выбора), действия / команды / службы и т. д. c.

Ясно, что повсеместная повторная проверка, как показано ниже, не принимается по DRY.

if ($user->company->access_groups_feature_enabled) {
    ...
} else {
    ...
}

Должно быть одно место с проверкой, включена или отключена та или иная функция, там же мы должны выбрать правильные Запросы / Услуги / Репозитории / et c, поэтому, если функция «Группы доступа включена», мы должны загрузить RequestImplyingAccessGroups , SomeEntityLikeUserRepositoryImplyingAccessGroup , ShowNewsServiceImplyingAccessGroups и т. д. (не беспокойтесь о присвоении имен, это просто для примера понимаю, что я имею в виду).

То же самое относится к целевым группам и другим функциям. Затем мы должны использовать эти классы с помощью общих зависимостей интерфейса, вводя их как-то в классы агностии c.

Я думаю, что это может быть сделано на уровне Middleware, но сейчас я немного запутался.

Есть ли лучшая практика для такого случая? Как вы реализовали это в своих проектах?

Также я нашел статью Фаулера об этом: https://martinfowler.com/articles/feature-toggles.html Но я думаю, что я немного запутался, применяя ее для laravel инфраструктуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...