Я реализую чистую архитектуру в приложении. У меня есть слой, где классы application / usecase выполняют бизнес-логику и взаимодействуют с множеством исходящих портов (интерфейсы для адаптеров для вызовов базы данных, вызовов http api и т. Д.). Вариант использования возвращает значение / модель веб-контроллеру (который отображает выходные данные для пользователя приложения).
Из-за сложности бизнес-логики существует много печальных путей и счастливых путей (которыеразличные типы объектов с различным состоянием), а также исключения, которые могут всплывать на веб-контроллере. Исключения обрабатываются обработчиком ошибок с общим ответом http и регистрируются.
Чтобы вернуть счастливые и грустные пути, я обернул их в объект из двух полей. Но я чувствую, что это запах кода, поскольку у меня всегда будет одно поле, возвращающее ноль. Таким образом, в веб-контроллере / сервлете есть проверки в заполненном поле, чтобы определить правильный HTTP-ответ. Является ли это хорошим способом сделать это?
Я видел примеры использования, возвращал счастливый путь, и всем грустным путям было дано конкретное бизнес-исключение. Это исключение перехватывается в веб-контроллере / сервлете и создает http-ответ с использованием сообщения об исключении. Я чувствую, что это также запах кода, поскольку мы используем исключения в качестве потока управления в веб-контроллере / сервлете.
Я видел другие способы возврата нескольких значений, например
- использование кортежа
- Возвращение одного объекта, но каждое поле является списком, что устраняет необходимость в нулевом значении в качестве пустого поля, и использование пустого списка
- Использование карты
Существуют ли другие способы возврата нескольких значений без использования пустых полей или использования исключений (как описано выше)?