Как-то задумался, зачем для Бд/очереди/других сервисов которые задействованы в проекте помимо их реализации добавляют еще и интерфейс. Понятно что детали реализации сервисов не должны светиться в бизнес логике, но разве мы не можем делать все методы/поля, которые специфичны для этой реализации делать приватными? Какой смысл в интерфейсе, если публичные методы реализации совпадают с интерфейсом один в один. Мало того, интерфейс не позволяет работать с полями, что бывает крайне неудобно.
Подскажите, может я что-то упускаю?
Интерфейс позволяет подменить реализацию. Если интерфейс 1в1 копирует реализацию, это ошибка проектирования (или интерфейс используется просто для того чтобы была возможность тестировать в изоляции от БД, Очереди и т.п.). Как правило такое случается, когда берут конкретную реализацию, а потом из нее извлекают интерфейс. Обычно же интерфейс обычно проектируется до того как выбрана ДБ/Очередь/Другой сервис.