Roman
даже грустно немного
Vasily
И проблемы другого характера
Roman
да дело не в твоем взгляде. Ты, по-моему, даже не пытаешься вникнуть в код
Vladislav
Vasily
Не понял, чем код отличается от мутабла
Roman
Создается впечатление, что если подход отличается от твоего, то это бойлерплейт/переусложнение хуе мое
Vasily
Принципиально
Vasily
У меня такое вот наговнякано:
[<RequireQualifiedAccess>]
module Ctx =
let mutable wrap =
fun data ->
async{
return { Id = 0L; Data = [||];Resend=true}
}
let mutable setSalt: int64->unit = fun _ -> ()
let mutable sendPayload: Payload->Result<unit,ChannelError> = fun (payload: Payload) ->Result.Error (ChannelError.EmptyData)
let mutable rcvStream = (EventStream<MessageData>().Stream)
Vasily
Чем оно отличается от твоего, не совсем понимаю
Vasily
Vasily
Точнее, сценарий возможный, но очень маловероятный
Roman
Ctx.wrap <- failwith "vot tak"
Vasily
Все упадет, очевидно
Vasily
Но как бы человек себе сам сознательно конечность отстрелит
Vasily
Так что пока аргумент не принимается
Николай
Vasily
Я прекрасно осознаю все вышеописанное
Roman
Vasily
Но когда у меня 1000+ функций, куда надо этот контекст прокинуть
Vasily
Это такое себе
Roman
при том, что "бойлерплейта" не меньше. Где-то ж надо присвоить все эти штуки в твой модуль
Vasily
5 строчек в одном месте
Vasily
Все
Roman
э нет
Vasily
Чо нет, когда да
Vasily
И те, кто с кодом работают, не заморачиваются на тему
Vasily
А как мне прокинуть это логирование?
Roman
тебе нужно инициализировать все это, а не только вызвать <-
Vasily
Roman
так что я пока не вижу, как этот подход лютейше экономит мои 150 (сто пятьдесят) строк кода
Vasily
Vasily
Суммарно
Vasily
Точнее 15
Николай
Но когда у меня 1000+ функций, куда надо этот контекст прокинуть
Если реально такой кейс, что тысячи использующих функций и всего полторы функции в контексте, то тогда, возможно, такое решение с мутабл переменными удобнее постоянного прокидывания зависимостей. С другой стороны, почему бы не завернуть 1000 функций в класс\модуль и прокидывать appEnv один раз в самом верху
Vasily
Ну вот и аллокаций тоже не очень хочется
Vasily
Я пытался к этой проблеме подойти с т.з. Романа - получалось слишком много геморроя без видимых бенефитов
Roman
я пока не вижу, в чем геморрой. В том, чтобы прокинуть 1 параметр?
Roman
или описать пару интерфейсов?
Vasily
Рома , 1000 + функций
Vasily
Ну и неохота с параметром бегать, да
Roman
ну у меня просто нет этих 1000 функций, и я даже не очень представляю, откуда бы им взяться
Vasily
У меня апи развесистый, скажем так
Roman
ну можт у меня, конечно, только такой кейс
Roman
собсно, это тоже решается. Ты просто делаешь 1 мутабельное поле в модуле, вместо всего контекста)
Roman
Зато оно у тебя настраивается атомарно
Roman
а у себя в этих легионах функций так же вызываешь Ctx.env.Logger
Vasily
Ну и начнем с того, что я тупо не понимаю, в чем в данном случае преимущество интерфейса
Roman
Гарантия атомарности настройки окружения
Roman
но я понял, что это не модно
Vasily
Нет такой гарантии
Roman
почему?
Николай
Делать мутабельное поле в каждом модуле - это, наверно, даже хуже, чем один мутабельный контекст. В каждом модуле надо инициализировать свои зависимости и не забыть, что используется внутри модуля; при добавлении новой зависимости придётся добавлять её в каждый модуль, где она нужна
Danil
r/ #BeAmazed
Упавшее дерево может послужить галерей для собственных ручных работ
Roman
Nuxs🏴☠️
Николай
Это решит только проблему того, что можно забыть инициализировать какую-то из функций контекста
Vasily
В общем, о правильности той или иной реализации я спорить не готов
Николай
Если таких функций 5 штук, как у Василия, то какой смысл их заворачивать в интерфейс
Nuxs🏴☠️
Nuxs🏴☠️
А препроцессор html там есть?
Danil
Nuxs🏴☠️
А, там есть DSL для html
Vasily
Vasily
Причем замылен только этот попап
Hog
https://www.amazon.com/dp/B08BDWYNWM
Vasily
ИМХО, тут Бугаенко должен платить, чтобы его читали
Mikhαil
И с разлагаемой в воде обложкой
Mikhαil
Издательство Zewa
Roman
кто-нить смотрел Love Death Robots?
Hog
Shub
Shub
Shub
эпизод с коммивояжерами в пустыне - топ.