dd

Что такое ExecutionResult и зачем он нужен

Написано

в

Когда я начал работать с Yii2, то меня вполне устраивало, что в результате выполнения любого метода на объекте можно вернуть true/false, потому как если какие-то ошибки и были, то их всегда можно было потом вытянуть через getErrors(). Или, того хуже, можно было кинуть исключение, а выше его отловить и использовать сообщение исключения где-нибудь дальше.
Однако, с течением времени в голову начали закрадываться мысли, что было бы неплохо, если бы результат выполнения метода сам рассказывал как всё прошло, успешно ли и где я там накосячил, а так же возвращал данные, сформированные в ходе выполнения.
Таким образом родился ExecutionResult — data transfer object для получения данных о результате работы формы. В данном случае под формой подразумевается класс, принимающий и валидирующий входные данные, а затем выполняет над этими данные необходимые операции. Это позволило решить две проблемы:
1. Результат работы формы теперь содержался в одном объекте, мне не приходится больше в трех строках кода вытягивать те или иные данные после выполнения
2. Инкапсуляция восторжествовала: форма стала по-настоящему чёрным ящиком — она отдаёт только те данные (ошибки, объекты или сообщение об исключении), которые посчитает нужным
Конечно, это не панацея и всё должно быть в меру, но, как мне кажется, решение вышло достаточно простым и удобным.
Собственно, сам интерфейс ExecutionResult:
⁃ bool $success
⁃ mixed $data
⁃ array $errors
⁃ string $exception
В имплементации это всё обёрнуто геттерами и имеет и несколько статических методов для быстрой генерации того или иного варианта.
Кстати, из-за такой структуры ExecutionResult удобно использовать как ответ на api-запрос.
P.S. Буду рад услышать какую-либо критику в адрес этого метода, либо запрос на пример использования в конкретной ситуации

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *