• Какой код нужно переносить в отдельные классы?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Не надо называть из хендлерами.
    Если брать пример $result = ['my_data' => $var];
    То не надо конечно. Но я понимаю о чем вы. Хотя если оперировать объектами в полной мере, то можно создать что то типа responseMyData

    Контроллер принимает реквест и отдает респонс, вызывая хендлр. Больше в нем не должно быть и строчки кода.
    За исключением каких то индивидуальных реализаций. Вот пример моих контроллеров. Убрал под

    Код котроллера - спойлер
    <?php
    
    class orderController extends AbstractController {
    
        /**
         * @ApiDoc(
         *     section="travelSystem",
         *     input=OrderRequest::class,
         *     statusCodes={
         *          200="sucess",
         *          404="Order not found"
         *     },
         *     views={"night_build"}
         * )
         * @RestDoc(
         *     security={Access::ORDER}
         * )
         * 
         * @return Response
         */
        public function orderAction(OrderRequest $orderRequest): Response
        {
            // Команда - простой объект с геттерами
            $command = new orderCommand(
                $orderRequest->getHotel(),
                $orderRequest->getCheckIn()
            );
            // Хендлер - в котором как раз и происходят все 
            // нужные нам операции по обработке
            $this->get('commandBus')->handle($command);
    
            return $this->responseForRest();
        }
    }


    Как вы видите, тут имеются свои особенности, но котроллер тоненький.
    Что же происходит в текущем хендлере?
    Там проверяется существование дублирующих записей (а это вызов репы и условие), далее вызывается модель для order, которая получает команды и уходит на запись. Это приходится дублировать, т.к. код по сути индивидуальный для каждого обработчика но схож по функционалу.

    А вот после записи в БД, вызывается слушатель, который вызывает событие на запись логов.
    Данная операция нужна везде и поэтому вынесена в отдельный объект который может быть вызван в любом хендлере, путем DI конструктора
    Далее еще хуже =) В логах имеется свой хендлер и своя цепочка событий.

    Допустим мы делаем запись чего в блог, отправляем в хендлер нашу команду или что там может быть в laravel, где происходит обработка. В обработке может быть запись в БД а так же загрузка изображения.
    Вот загрузку изображения, стоит выделить в отдельный сервис.
    Ответ написан
    7 комментариев
  • Как реализовать ajax авторизацию запроса?

    AlexBond
    @AlexBond
    Crazy WebDev
    1. Сессии
    2. Генерацию строк-ключей для запроса
    3. Генерация RSA ключей (для особо злых особей)
    Ответ написан
    6 комментариев
  • Исключения или проверка?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Однако не совсем понятно, было бы верным делать исключения в контроллере или все же сначала спросить сервис о например существовании мыла?

    Вы и так обрабатываете этот момент в catch блоке. Ваша реализация - ок.

    switch ($e->getCode())

    Лучше заведите больше исключений и используйте несколько catch.

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

    Когда понадобится - напилите под этот тип авторизации отдельный сервис.
    Ответ написан
    3 комментария
  • [Новичок] PHP OOP появились сомнения. Что делать и как быть?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    1. Паттерны это просто примеры решения часто возникающих проблем. Если вы знаете много паттернов, то скорее всего не будете изобретать велосипед там, где не надо. Но всегда можно действовать по ситуации, потому что стандартные методы не покрывают все требования.

    2. Смотря как вы будете с ними работать. Если сущности слишком элементарные, можно и общий объект-массив

    3. Сложно сказать. Если вам кажется, что много - подумайте, можно ли передавать в качестве аргумента сразу объект. И имеет ли смысл создавать новый класс для этого. Иногда бывает достаточно сделать достаточно конструкторов, и иметь возможность указывать не все аргументы.

    4. Подключение к базе должно быть одним модулем.
    Ответ написан
    Комментировать
  • [Новичок] PHP OOP появились сомнения. Что делать и как быть?

    qonand
    @qonand
    Software Engineer
    1. Паттерны как и любые вещи в программировании стоит применять только там, где это требуется, а не абсолютно везде. К каждой задаче нужно подбирать свой инструмент
    2. Да это нормальная практика. Но тут нужно понимать как Вы с ними будете работать
    3. Думаю не более 3-4, в противном случае будет не очень читабельно и удобно работать.
    4. Нет. Для работы с базой данных у Вас должен быть реализовать отдельный класс. А уже сущность должна его использовать для получения данных
    Ответ написан
    6 комментариев