[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Когда пошло не так, и DTO
Forever
Вопрос, в общем-то простой

Например, у меня есть обработчик файла

Файл должен быть:
принят,
проверен,
сохранен,
переименован,
скопирован
заархивирован

И тд. и в каждом случае, при неудаче , нужно вернуть конкретное сообщение об ошибке (особенно если ориентироваться на удобство для пользователя)

В самом идеальном случае, нужно написать на каждый шаг функцию, возвращающую bool, и если на каком то шаге вернулся false, отдавать юзеру соответствующее сообщение
Но что если на каждом шаге (например, на архивации)может быть несколько вариантов ошибок, и на каждую надо так же отдать юзеру свой текст?

Для меня это частый случай, тк. я обычно так и делаю, в итоге и самому проще разобраться, если что то пошло не так, и люди довольны. Ну и соответственно проблема наболевшая)

Один коллега предложил мне вариант, из каждой "сложной" функции, возвращать DTO (data transfer object) , у которого есть статус, текст и иногда нагрузка, какое то содержимое

и если статус false, делаем return текста


Сейчас вот читаю,некоторые пишут, что dto это зло
Но пишу в целом узнать

1) Какие есть альтернативы
2) Как Вы обычно делаете
3) стоит ли использовать DTO
4) стоит ли использовать его так, как описано выше?

пасыба заранее)
brevis
Цитата (Forever @ 5.06.2020 - 22:02)
1) Какие есть альтернативы
2) Как Вы обычно делаете
3) стоит ли использовать DTO
4) стоит ли использовать его так, как описано выше?

1) Exceptions.
2) По настроению. Чаще наверное Exceptions.
3) Да как хочешь.
4) Вполне. Ты часто с подобным сталкивался, просто может не обращал внимание. Например, посмотри на PDO:: errorInfo()... (надеюсь тебя не смутит реализация DTO в виде массива в данном случае)

Цитата (Forever @ 5.06.2020 - 22:02)
и самому проще разобраться, если что то пошло не так

С этим может помочь логирование.

_____________
Чатик в телеге
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.