https://github.com/DmitriyDevv/currency-exchange-api
Ревью от Сергея Жукова
Серьезных проблем нет.
- БД операции интересно обернуты в транзацию через лямбду, но иногда из-за этого пришлось изгаляться, чтобы получить результат испольнения лямбды
- На мой вкус, валидация более уместна в контроллерах, чем в сервисах
- Завязанные на SQL DAO ошибки я бы ловил в DAO, не в сервисах
- Многовато статик методов в сервисах. Вместо этого можно создавать их там, где они нужны, или единожды создать при старте приложения, и положить в контекст. Статик методы будут неудобны, если потребуется что-то более сложное, например наследование. Ты так делаешь, например с
CurrenciesDataAccess
, но сервисы со статик методами - Вместо использования null я бы рассмотрел Optional.
- Сервисы сразу кидают REST-специфичные эксепшены, что завязывает их на контекст REST API. Альтернатива - кинуть
ExchangeRateNotFoundException
, в сервлете обработать и перебросить в 404 - Не везде очевидный нейминг, например DTO для ответа на запрос по конвертации называется Exchange. Я бы не экономил слова -
ExchangeResponseDto
addCurrency
в DAO слое возвращает void вместо всталенной валюты, приходится ходить делать SELECT, чтобы вернуть клиенту