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

Всем доброго времени суток! Мне стало интересно, а как правильно

оформлять комментарии к коду в случае если есть файл в котором интерфейс + его реализация. Вот пример того о чем я говорю:


# main.go

type Servicer interface {
Foo(a string) error
Bar(b int) error
}


type Service struct {}
func (s *Service) Foo(a string) error {…}
func (s *Service) Bar(b int) error {…}


В каком месте лучше оформлять доку, в интерфейсе или все таки его реализации? Или дублировать?
Я пока что склоняюсь к варианту чтоб в интерфейсе описывать в общих чертах зачем и для чего нужно, а уже в структуре описывать нюансы реализации. Но правильно ли это я хз

19 ответов

14 просмотров

неправильно свзывать интерфейс с реализацией, для начала

rglitchard- Автор вопроса
Daniel Podolsky
неправильно свзывать интерфейс с реализацией, для ...

в плане моего понимания или кода выше?) Ну вот допустим интерфейс описывает поведение какого-то круда где будет куча бизнес логики (подразумевается что это находится в слое service из примеров чистая архитектура/DDD) Интерфейс с реализациями же всегда будет связан как не крути. А вот куда комменты в этом случае запихнуть я не знаю)

rglitchard
в плане моего понимания или кода выше?) Ну вот до...

а зачем вам нужен отдельный интерфейс круда? что бы было?

rglitchard- Автор вопроса
Andrei 🦉 Sergeev
а зачем вам нужен отдельный интерфейс круда? что б...

в случае с интерфейсами этот код легко тестировать, потому что любой метод можно мокнуть

rglitchard
в случае с интерфейсами этот код легко тестировать...

Ну вот и описывайте интерфейсом используемую часть круда в том месте, где он используется У вас в голове все еще парадигма других языков программирования, что есть абстрактный класс- интерфейс, а есть его реализация, но в го нет абстрактных классов, а интерфейс это просто контракт

rglitchard
в случае с интерфейсами этот код легко тестировать...

Интерфейс должен лежать там где его используешь. Используешь в нескольких местах пишешь несколько интерфейсов(всё равно с течением времени разойдутся) Если интерфейс прям во многих местах используется можно ему отдельный пакет дать...

Andrei 🦉 Sergeev
Ну вот и описывайте интерфейсом используемую часть...

"в го нет абстрактных классов" ну почему ж, автогенеренный мок для интерфейса, где каждый метод вызывает panic("implement me") - ведь почти тоже самое, что абстрактный класс по поведению. ну да, классов и иерархии в принципе нет.

Elmanov Anton
"в го нет абстрактных классов" ну почему ж, автоге...

нет, не то же самое,это называется писать джавовый код на го🤣

Andrei 🦉 Sergeev
нет, не то же самое,это называется писать джавовый...

я вот не заметил по вопросу документирования интерфейса и реализации, что это попахивает джавой 🙂

Elmanov Anton
я вот не заметил по вопросу документирования интер...

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

rglitchard- Автор вопроса
Andrei 🦉 Sergeev
Ну вот и описывайте интерфейсом используемую часть...

если представить типичную (в моем понимании) реализацию веб-сервера с простым крудом, это будет выглядеть примерно вот так: Слой #0 - модели (они же выступают доменной зоной) Слой #1 - интерфейс репозитория (взаимодействует с моделями) Слой #2 - интерфейс сервиса с бизнес логикой который взаимодействует с моделями и интерфейсом репозитория Слой #3 - хэндлеры используемые веб-фреймворком которые дергают интерфейс сервиса и только. Это все достаточно удобно по частям покрывать юнит тестами и в принципе работать с этим Но получается с вашим подходом я должен определять в хэндлерах интерфейс сервиса который отвечает за круд? Тогда это будет какая-то путаница, по крайней мере сейчас в моей голове) А есть примеры кода где можно посмотреть на такой подход? Потому что все что я гуглил про интерфейсы сводилось к описанию слоев которое я прикрепил выше

rglitchard
если представить типичную (в моем понимании) реали...

Вы исходите из того,что чистая архитектура - это истина в последней инстанции и пытаетесь по нее подогнать даже типичный круд, сразу выделяя 4(!) слоя абстракций и сходу утыкаетесь в проблемы с интерфейсами, потому что сам дизайн языка этому противоречит. Я не смогу вам здесь ничего ответить, потому что за мою 6 летнюю практику на го я с такой проблемой ни разу не сталкивался

rglitchard- Автор вопроса
Andrei 🦉 Sergeev
Вы исходите из того,что чистая архитектура - это и...

ну я бы не сказал что истина в последней инстанции) Просто я изначально писал код вообще без интерфейсов, пока не столкнулся с проблемой тестирования и расширения кода. Потом немного погуглил как правильно их использовать и в целом все ссылки и статьи сводились к моему примеру выше Теперь вот я узнал уже от нескольких участников этого чата что с интерфейсами стоит работать вообще иначе, но к сожалению каких-то показательных репозиториев нет чтоб понять :(

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

rglitchard
если представить типичную (в моем понимании) реали...

Вы написали только горизонтальные слои. По моему небольшому опыту, если горизонтальные слои разделять интерфесами(а других не вводить), то современем они обрастают гиганскими интерфейсами, которые устанешь мокать и которые приводят к сильной связанности. Используйте "ещё вертикальные" слои внутри горизонтальных. Т.е. нужен хендлеру из всего CRUD только метод R, то пусть и интерфейс у него будет только с одним R. А уже реализация может реализовывать несколько интерфейсов без проблем...

rglitchard
ну я бы не сказал что истина в последней инстанции...

Я тоже что то сходу не нашел все те статьи, что в свое время читал при входе в го, все потонуло в шлаке про ca и ddd...

rglitchard
ну я бы не сказал что истина в последней инстанции...

Проблема не в примерах а в понимании концепций слабой связаности

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта