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

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

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

3 ответов

15 просмотров

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

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

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Всем привет! Кто пользуется DevExpress, подскажите пожалуйста, реализован ли в TcxGrid в новых версиях поиск по датам как в Экселе (ну т.е. не просто список чекбоксов со значе...
A Z
4
Карта сайта