170 похожих чатов

Как-То задумался, зачем для Бд/очереди/других сервисов которые задействованы в проекте

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

3 ответов

8 просмотров

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

Для тестирования и рефакторинга. Интерфейс = late binding (at runtime), что значит что мы в runtime можем поменять конкретную реализацию на которую диспатчатся вызовы методов. С early binding’ом (at compile-time) такое будет невозможно. Например мы пользуемся gomock с помощью которого используем mock за интерфейсами в тестах

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

Похожие вопросы

Обсуждают сегодня

коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
средствами IBX как-то можно выполнить запрос insert ... returning?
Igor
31
что это и почему оно? executor.start_polling(bot, skip_updates=True, on_startup=on_startup, File "/usr/local/lib/python3.10/dist-packages/aiogram/utils/executor.py", line 4...
𐌍𐌄 ᕓ𐌄𐌓𐌌Ꝋ𐌓𐌄
2
reply = (struct pam_response *)malloc(sizeof(struct pam_response)); reply[0].resp = strdup(password); Это так можно ображаться к структуре за указателем, помимо (*reply)...
Юлиан🦉 Колессиков ⛵️
14
#delphi кто-нибудь встречал официальное описание директивы {$ALIGN ON} (подчеркиваю - официальное, а не левый источник)? какой именно режим выравнивания включится? будут ли в...
Viktor Akselrod
14
Возможно речь идёт про сворачивание текста функций в редакторе кода?
George
9
Другой вопрос. В последней Делфи не могу приложение свое завершить. Хальт не пашет. Пришлось процесс свой искать и завершать. Лет 20 назад хальт работал всегда. Что то поменял...
1C Programmer
7
Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
53
объясните, я прада не понимаю. зачем в перле нужен аниивент? кому он пригодился в действительно нагруженных проектах?
nerv
30
какой из яву имеет в качестве инлайн асма fasm синтаксис (по сути тот же фасм)?
Aiwan \ (•◡•) / _bot
11
Карта сайта