Size: a a a

2020 June 07

ЗА

Заур Ашурбеков... in Go-go!
V L
Да, т.к. в случае изменения зависимости придется переработать больше кода, чем только вызов фабрики.
Это все очень абстрактно
источник

s

snip in Go-go!
Anton Kucherov
А скажите пожалуйста, почему в этих языках вы экспортируете интерфейс? что мешает экспортировать реализацию и подставлять ее туда где параметром является интерфейс?
смотрите, постараюсь понятнее
в других языках мы определяем интерфейс например Storage и везде где нам нужен Storage мы используем этот интерфейс
в го принят другой подход - мы определяем интерфейс когда нам нужно здесь и сейчас абстрагировать какое то поведение
источник

VL

V L in Go-go!
Заур Ашурбеков
Это все очень абстрактно
А самое главное, что очень часто используется только одна реализация (не пишут юниты и не мокают) и интерфейсы не нужны.
источник

AK

Anton Kucherov in Go-go!
snip
смотрите, постараюсь понятнее
в других языках мы определяем интерфейс например Storage и везде где нам нужен Storage мы используем этот интерфейс
в го принят другой подход - мы определяем интерфейс когда нам нужно здесь и сейчас абстрагировать какое то поведение
Я спрашиваю почему мы так делаем в других языках, а в Go иначе? Вы говорите: Потому что под интерфейсами другая "идея". Я говорю: потому что реализовано по разному (А идея одинаковая). И в других языках и в Go мы используем интерфейс чтобы абстрагировать хранилище. Т.е. идея одна и та же. Не видите здесь противоречия?
источник

ЗА

Заур Ашурбеков... in Go-go!
Не ребят, это просто соблюдение правил ради правил. В примере выше шанс, что сервис начнёт реализовывать другой интерфейс, а не свой, близок к нулю
источник

s

snip in Go-go!
Anton Kucherov
Я спрашиваю почему мы так делаем в других языках, а в Go иначе? Вы говорите: Потому что под интерфейсами другая "идея". Я говорю: потому что реализовано по разному (А идея одинаковая). И в других языках и в Go мы используем интерфейс чтобы абстрагировать хранилище. Т.е. идея одна и та же. Не видите здесь противоречия?
идеи разные, задачи теже
в других языках по другому потому что они другие, как уже сказали выше например нет утинной типизации
источник

VL

V L in Go-go!
Заур Ашурбеков
Не ребят, это просто соблюдение правил ради правил. В примере выше шанс, что сервис начнёт реализовывать другой интерфейс, а не свой, близок к нулю
Преждевременная абстракция - это также плохо, как и преждевременная оптимизация.
источник

AK

Anton Kucherov in Go-go!
snip
идеи разные, задачи теже
в других языках по другому потому что они другие, как уже сказали выше например нет утинной типизации
Отсутвие утиной типизации - есть деталь реализации.
источник

s

snip in Go-go!
задача - абстрагировать поведение
java-style интерфейс как API к некой сущности
go - интерфейс как заглушка некого поведения требуемого по месту
источник

s

snip in Go-go!
Anton Kucherov
Отсутвие утиной типизации - есть деталь реализации.
это например как с метриками, есть пуш подход, а есть пул, задачи одинаковые идеи разные
источник

AK

Anton Kucherov in Go-go!
Да одни и те же идеи и в Go и в Java интерфейс задает "Контракт API". Только в Java отличается реализация и поэтому надо явно говорить компилятору что тот или иной класс реализует этот контракт. А Go  сам способен догадаться.
источник

s

snip in Go-go!
одинаковые идеи но разные реализации это например классы в java и в php4 )
источник

НМ

Никита Меркулов... in Go-go!
а я вот не хочу участвовать в сраче но просто хочу поддержать @antonikucherov , выразив солидарность )
источник

s

snip in Go-go!
Anton Kucherov
Да одни и те же идеи и в Go и в Java интерфейс задает "Контракт API". Только в Java отличается реализация и поэтому надо явно говорить компилятору что тот или иной класс реализует этот контракт. А Go  сам способен догадаться.
это разные подходы, они разные не только потому что реализованы по разному, они в принципе подразумевают несколько "мыслить немного по другому"
источник

VL

V L in Go-go!
Anton Kucherov
Да одни и те же идеи и в Go и в Java интерфейс задает "Контракт API". Только в Java отличается реализация и поэтому надо явно говорить компилятору что тот или иной класс реализует этот контракт. А Go  сам способен догадаться.
Разницы нет никакой. Тут вопрос про то, что рекомендуемый подход позволяет коду определить требуемое поведение, а не зависимости его диктовать. Так-то от адаптеров никто не отказывается.
источник

НМ

Никита Меркулов... in Go-go!
как уже правильно отметил товарищ Подольский, интерфейы в го нужны ровно для того же, для чего нужны в других яп - обеспечиать low coupling , все остальное - детали имплементации
источник

s

snip in Go-go!
Никита Меркулов
как уже правильно отметил товарищ Подольский, интерфейы в го нужны ровно для того же, для чего нужны в других яп - обеспечиать low coupling , все остальное - детали имплементации
да, задачи у них одинаковые, с этим же никто не спорит
источник

VL

V L in Go-go!
Но поинт именно в том, что чаще всего интерфейсы вообще не нужны, т.к. всего одна реализация. Зачем тогда их использовать и городить преждевременную абстракцию?
источник

S

Sergey in Go-go!
Реализация одна, пока не дойдёт дело до тестирования. И там всё-равно сделаешь интерфейс и вторую реализацию. Так не проще ли всегда делать сразу, а потом посто писать тесты или добавлять другие реализации, когда вдруг понадобятся, вместо рефакторинга?
источник

AK

Anton Kucherov in Go-go!
Предпосылка о том, что:
- Если у нас есть одна реализация, абстракция не нужна и является преджевременной, на мой взгляд в корне не верна.
источник