Ответы пользователя по тегу ООП
  • Что должно находиться в инфраструктурном слое в многослойном приложении?

    xEpozZ
    @xEpozZ
    Веб-разработчик
    Всё, что не важно для бизнес-логики, должно быть вне domain-слоя.
    Разве бизнесу важно, как будет выстроен хеш пароля? (Несомненно, зависит от бизнеса, но в 90% случаев нет).
    Спросите об этом доменного эксперта или хотя бы менеджера.
    Они могут даже не знать, что такое "хеш" в принципе.

    А интерфейс лежит в домене, потому что нужно как-то соединить это "неважно" с "нужно".

    Даже если бы была только одна реализация, ее в примере вынесли все равно.

    Можно ли положить в домене? Вы строите систему. Хотите, положите в доменный слой, хотите, вынесите в микросервис. Хотите, пишите на PHP, или на Go или на C++.
    Как решите Вы, так и делайте.

    Правильнее абстрагировать домен от всего лишнего. Всего, что не касается предметной области. Но вот только иногда (почти всегда) этого не удается сделать адекватно и следующий джун обязательно сделает что-то не так.
    Плюс к тому же, абстракциями можно задушиться, что потом не разберешься, что использовать.

    Есть моменты, которые будут меняться вне зависимости от вашей предметной области:
    обновления пакетов, уязвимости в безопасности при использовании чего-либо, новые быстрые реализации каких-либо модулей. В этом случае ваш бизнес-слой не должен быть подвержен изменениям. Но он четко должен знать, если вызовет реализацию этого интерфейса, то получит результат. Лишь это вы и должны гарантировать на бизнес слое.
    Ответ написан
    2 комментария
  • Как данные попадают в класс?

    xEpozZ
    @xEpozZ
    Веб-разработчик
    десериализация, __set_state
    Ответ написан
    Комментировать
  • Проверка действий пользователя непосредственно в методе контроллера?

    xEpozZ
    @xEpozZ
    Веб-разработчик
    Сделайте новые методы, чтобы облегчить себе жизнь:
    public function checkDeletePermission($role) {
        $this->checkPermission($this->getRole($role), Action::DELETE);
    }
    public function checkReadPermission($role) {
        $this->checkPermission($this->getRole($role), Action::READ);
    }
    public function checkCreatePermission($role) {
        $this->checkPermission($this->getRole($role), Action::CREATE);
    }


    А еще можно сделать 1 метод с проверками по методам, например:
    Controller:
    __checkActionsPermissions
    ____return ['actionView' => ['role' => 'email', 'permission' => Action::VIEW]];

    Далее перед вызовом ваших экшеном сначала прогоняйте этот метод через валидаторы/чекеры.
    В итоге вы не будете загрязнять ваши методы лишним кодом, не относящимся к сути непосредственно.
    Ответ написан
    Комментировать