Как-то задумался, зачем для Бд/очереди/других сервисов которые задействованы в проекте помимо их реализации добавляют еще и интерфейс. Понятно что детали реализации сервисов не должны светиться в бизнес логике, но разве мы не можем делать все методы/поля, которые специфичны для этой реализации делать приватными? Какой смысл в интерфейсе, если публичные методы реализации совпадают с интерфейсом один в один. Мало того, интерфейс не позволяет работать с полями, что бывает крайне неудобно.
Подскажите, может я что-то упускаю?
> Мало того, интерфейс не позволяет работать с полями, что бывает крайне неудобно.
поэтому я и дебатировал тут на днях о том, что нельзя смотреть на интерфейсы как на “абстрактные сущности”.
Пример: Stream плохое название для интерфейса, ибо оно отображает сущность (поток данных). Такой интерфейс должен называться Streamer ибо сразу становится понятно, что это нечто, что читает поток данных и не является самим потоком.
Интерфейс это диспетчер вызова методов. Это актор, который позволяет выполнять действия на каком либо объекте (при этом пользователю интерфейса не должно быть известно к какой конкретной реализации он обращается, ему должно быть пофиг.)