Size: a a a

2020 May 19

AR

Aleksandr Razumov in Go-go!
А что такое идеоматично тогда?
источник

AR

Aleksandr Razumov in Go-go!
Тот же context.Context был новым интерфейсом, его можно было каким угодно идеоматичным сделать
источник

AR

Aleksandr Razumov in Go-go!
В итоге опять нарушили два правила именования
источник

IS

Ilya Shikhaleev in Go-go!
Roman Sharkov
Понятие “правильно” - существует, и определяется оно консенсусом сообщества.
Ну поэтому и не говорим про правильно :) вопрос чисто архитектурный - как не дать разработчику нарушать инварианты
источник

AR

Aleksandr Razumov in Go-go!
Ilya Shikhaleev
Ну поэтому и не говорим про правильно :) вопрос чисто архитектурный - как не дать разработчику нарушать инварианты
Писать на хаскеле)
источник

RS

Roman Sharkov in Go-go!
Aleksandr Razumov
Ну смотри, у нас есть три слоя: json, бизнес логика и работа с базой данных
На каждом слое своя структура :)
у меня зачастую именно так. Структура, которая нужна базе может сильно отличаться от той, которая представляет сущность реального бизнеса. А если нам нужен JSON, то это отдельная структура, поскольку она тоже может отличаться (например json tag’и в бизнес сущности ничего не потеряли).

Можно конечно читить и переиспользовать некоторые стурктуры, но по моему лично опыту со временем это начинает всё портить.
источник

AR

Aleksandr Razumov in Go-go!
Roman Sharkov
у меня зачастую именно так. Структура, которая нужна базе может сильно отличаться от той, которая представляет сущность реального бизнеса. А если нам нужен JSON, то это отдельная структура, поскольку она тоже может отличаться (например json tag’и в бизнес сущности ничего не потеряли).

Можно конечно читить и переиспользовать некоторые стурктуры, но по моему лично опыту со временем это начинает всё портить.
если генерировать преобразования из одной структуры в другую, то может это и будет работать, но на практике очень много бойлерплейта
источник

AR

Aleksandr Razumov in Go-go!
чистые абстракции выбрасываются в угоду прагматичности и дедлайнам
источник

VG

Vladislav Gruchik in Go-go!
Ilya Shikhaleev
Ну поэтому и не говорим про правильно :) вопрос чисто архитектурный - как не дать разработчику нарушать инварианты
Обложить почти все интерфейсами и функциональными опциями. Но писать много и использовать неудобно будет. Я пытался.
источник

AR

Aleksandr Razumov in Go-go!
функциональные опции еще мокаются не очень удобно
источник

AR

Aleksandr Razumov in Go-go!
или интерфейсно-функциональные, которые еще пытаются как-то не давать имплементировать интерфейс свой
источник

AR

Aleksandr Razumov in Go-go!
// An Option configures a Logger.
type Option interface {
 apply(*Logger)
}


Вот типа такого
источник

AS

Alexandr Smirnov in Go-go!
Captain Jack Vielfrass
Спасибо. Теперь fasthttp тоже 20 секунд. А почему у net/http нет замедления при создании клиента каждый раз?
Вот это читали? https://habr.com/ru/post/443378/
источник

RS

Roman Sharkov in Go-go!
Aleksandr Razumov
Тот же context.Context был новым интерфейсом, его можно было каким угодно идеоматичным сделать
этот тип уже подвергся колосальной критике. Это очень корявый дизайн и многие это признали.
источник

AR

Aleksandr Razumov in Go-go!
Roman Sharkov
этот тип уже подвергся колосальной критике. Это очень корявый дизайн и многие это признали.
А хз как сделать лучше
источник

AR

Aleksandr Razumov in Go-go!
Было же куча времени это исправить
источник

VG

Vladislav Gruchik in Go-go!
Aleksandr Razumov
или интерфейсно-функциональные, которые еще пытаются как-то не давать имплементировать интерфейс свой
Такое тоже делал.
источник

RS

Roman Sharkov in Go-go!
Aleksandr Razumov
А хз как сделать лучше
во первых разделить на Canceler и Context
источник

AR

Aleksandr Razumov in Go-go!
Насколько я помню, там хорошего решения нет
источник

RS

Roman Sharkov in Go-go!
Aleksandr Razumov
если генерировать преобразования из одной структуры в другую, то может это и будет работать, но на практике очень много бойлерплейта
поэтому частенько приходится читить изначально, а потом фиксить внедряя новые типы.
источник