Какие дополнительные контракты нужны для реализации функционала справочника
Что проверяют
Как вы проектируете модуль не с одного CRUD, а с учётом всех его потребителей. Справочник (валюты, статусы, города) читают почти все сервисы, поэтому интервьюеру важно, подумаете ли вы о кэшировании, версиях и оповещении об изменениях. Следом обычно спрашивают, как потребители узнают, что запись справочника изменилась.
Как отвечать
Начните с того, что интерфейс репозитория с CRUD это минимум, а дополнительные контракты нужны на границах модуля:
- внешний API: спецификация OpenAPI с чтением по коду, списком с пагинацией, фильтром и поиском. Отдельно фиксируется формат ошибок, например Problem Details по RFC 9457, в Spring для этого есть
ProblemDetail; - DTO и маппинг: наружу уходит не JPA-сущность, а
record, маппинг через MapStruct или вручную. Так схема базы не протекает в контракт; - сервисный интерфейс:
DictionaryService, где методы чтения отделены от команд изменения, если писать могут только администраторы; - валидация: Bean Validation на входе (
@NotBlank,@Size) плюс бизнес-правила вроде уникальности кода и запрета удалять используемую запись; - событие об изменении: схема сообщения
DictionaryItemChangedв Kafka или другой шине, чтобы потребители сбросили свой кэш; - кэш и версии:
ETagили номер версии справочника, чтобы клиент не тянул весь список на каждый запрос, и@Cacheableна стороне сервиса; - история и мягкое удаление: флаг активности и даты действия записи вместо физического
DELETE.
Отдельно скажите о версионировании API: новое поле добавляется совместимо, а удаление поля требует новой версии или периода депрекации.
Где спотыкаются
Отвечают только интерфейсами Repository и Service. Это внутреннее устройство, а интервьюера интересуют ещё и контракты с потребителями.
Отдают наружу класс с @Entity. Любая правка таблицы ломает клиентов, а ленивые связи при сериализации легко приводят к LazyInitializationException или к лишним запросам.
Удаляют записи физически. Заказы пятилетней давности ссылаются на код, которого больше нет, и отчёты разваливаются.