Предыстория.
Был сервис CRUD сущности.
create, update.
Я понял, что create занимается валидацией РЕКВЕСТА, затем вставкой в бд.
Хорошо. Декомпозировали на два метода. Все равно ерунда. Сервис работает с реквестом.
Разбиваем на RequestDTO который валидируется еще в ArgumentResolver.
update вычисляет, что именно в сущности обновить. Снова разбили на несколько методов.
Получили класс со следующей картой действий:
class Foo {
create()
create()
create()
update()
update()
update()
}
Что явно дало понять, что пора извлечь методы create и update в отдельный класс
Валидация ушла на ассерты и аргумент резолвер.
create и update превратились в простейшие классы с минимальным уровнем сложности.
И потихоньку из-за максимального упрощения, стало казаться что достаточно функционалки.
Типа, просто проверим, что если скормить дичь вместо параметров - реально выкинется ошибка с нужным кодом.