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 ответов

12 просмотров

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

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
ну я бы не сказал что истина в последней инстанции...

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

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

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

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