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

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

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

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

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

28 ответов

28 просмотров

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта