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

Гайс, где храните интерфейсы и их реализации? В одном файле,

либо в разных файлах одного пакета, либо реализацию в подпакете?

И про нейминг тоже интересно. UserRepo и UserRepoImpl, либо можно и интерфейс, и реализацию называть UserRepo, но в разных пакетах хранить.

У кого какие предпочтения с вытекающими плюсами и минусами?

28 ответов

24 просмотра

Предыдущий язык был c++?

скорее всего, оба будут просто Repo

Интерфейсы там, где их использование/потребитель

Chingiz Seitov- Автор вопроса
🏳️ Phil Kulin
Предыдущий язык был c++?

Уже год на Го. Просто везде по-разному, вот и интересно мнение

Chingiz Seitov- Автор вопроса
Aleksandr Razumov
Интерфейсы там, где их использование/потребитель

Не совсем понял. То есть, если есть сервис, то интерфейс UserRepo хранить в пакете сервиса?

Chingiz Seitov
Уже год на Го. Просто везде по-разному, вот и инте...

Смысл в том, что это так не работает. Надо найти где-то пост про концепт. Не спеку, а именно описание, паттерны и примеры

Chingiz Seitov- Автор вопроса
🏳️ Phil Kulin
Смысл в том, что это так не работает. Надо найти г...

Ну условно у меня CRUD по слоям: контроллер, сервис, репо. В пример, могу привести эту структуру проекта, которая мне нравится: https://github.com/evt/rest-api-example Но там интерфейс сервиса хранится с реализацией в одном пакете, а с репо - в подпакете. Показалось довольно странным

Chingiz Seitov
Ну условно у меня CRUD по слоям: контроллер, серви...

Для меня этот шаблон является бессмысленным набором слов. Смысл в том, что интерфейс описывается там, гле будет использоваться. Что такое "использоваться"? А это там, где у вас будет заявлена переменная типа интерыейса. Яркий пример - пакет fmt. Там Printf проверяет, что если аргумент реализует интерфейс fmt.Stringer, то при форматтере %s будет вызван метод String() переменной, а не попытка самому создать вид.

🏳️ Phil Kulin
Для меня этот шаблон является бессмысленным наборо...

Реализация же String() вообще гле-то в ваших пакетах в этом примере

Chingiz Seitov
Не совсем понял. То есть, если есть сервис, то инт...

если у вас сервис вызывает UserRepo - имеет смысл описать UserRepo именно в сервисе именно как интерфейс

🏳️ Phil Kulin
Для меня этот шаблон является бессмысленным наборо...

интерфейс нужно описывать в ядре, смысла делать интерфейс для того модуля, который будет иметь только одну реализацию, нет

Серж ИзТанзании
интерфейс нужно описывать в ядре, смысла делать ин...

ну, если вы любите монолиты - описывайте в ядре, чо

забудь, наверное зависит от задачи, я говорю отталкиваясь от своего опыта разработки движка на го., если же речь идет о конкретном продукте, все зависит от многих факторов

У интерфейса ничего не должно быть. Он может быть вообще в вакууме. Ярчайший пример - пакет io

🏳️ Phil Kulin
У интерфейса ничего не должно быть. Он может быть ...

вот-вот, все зависит от того для чего разрабатывается интерфейс, кто будет делать имплементации, не получится ли cyclic import, одна из причин почему я за то чтобы интерфейсы хранились в неком ядре - избежать циклических импортов

Серж ИзТанзании
вот-вот, все зависит от того для чего разрабатывае...

Нет, не зависит. Нет никакого разнообразия "всё зависит от" в случае интерфейсов

хм, да.

Chingiz Seitov- Автор вопроса
Daniel Podolsky
если у вас сервис вызывает UserRepo - имеет смысл ...

Ещё вопрос) А если я захочу использовать UserRepo в другом сервисе, то имеет смысл интерфейс UserRepo хранить в своём пакете (возможно, в пакете имплементации)? Просто, не вижу смысла в пакете другого сервиса объявлять ещё раз UserRepo

Серж ИзТанзании
поясните свою мысль сударь ? :)

"все зависит от того для чего разрабатывается интерфейс" - это бессмысленный набор утверждений. Нет никакого "разрабатывается интерфейс"

🏳️ Phil Kulin
"все зависит от того для чего разрабатывается инте...

Это очень фунтаментально. Интерфейс всегда применяется и никогда не разрабатывается

🏳️ Phil Kulin
Это очень фунтаментально. Интерфейс всегда применя...

Пойду запишу цитату мудреца в блокнотик. Это гениально же

Серж ИзТанзании
вот-вот, все зависит от того для чего разрабатывае...

ИМХО: интерфейс всегда надо хранить в месте его использования

Pavel Mozhchil
ИМХО: интерфейс всегда надо хранить в месте его ис...

ну вот, прочтите вопрос от человека: Ещё вопрос) А если я захочу использовать UserRepo в другом сервисе, то имеет смысл интерфейс UserRepo хранить в своём пакете (возможно, в пакете имплементации)? Просто, не вижу смысла в пакете другого сервиса объявлять ещё раз UserRepo Помоему вопрос уместный.

Серж ИзТанзании
ну вот, прочтите вопрос от человека: Ещё вопрос) А...

А смысл есть. Это же, по факту, не связанные UserRepo. Вот и не надо на ровном месте coupling повышать

Серж ИзТанзании
ну вот, прочтите вопрос от человека: Ещё вопрос) А...

т.е. если есть несколько реализаций этого UserRepo и несколько мест его использования? в идеале надо IUserRepo бить на более мелкие IUserRepoStat IUserRepoCrud IUserRepoAdmin и класть их туда где они применяются но я с таким не сталкивался

Daniel Podolsky
А смысл есть. Это же, по факту, не связанные User...

так никто и не повышает, я к тому что использование зависит от задачи.

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

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

Мужики и девушки, привет) в В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
Карта сайта