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

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

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

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

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

28 ответов

26 просмотров

Предыдущий язык был 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...

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта