Vasily
И да, это некрасиво
Vasily
И не по фп
Vasily
Второй вариант- функция обёртка
Doge
И да, это некрасиво
Это опасная идея. Так легко можно получить в духе плохой акки приложения в паттерне реактивной лапши. Где всё связано со всем через проброс сообщений через акторы.
Doge
Ну как сделано в аспнет, пропихивается следующая функция в пайплайне и контекст
Руками? Через каждую функцию в потенциально большом наборе логики?
Doge
Второй вариант- функция обёртка
И если я правильно понял, что ты имеешь в виду, то это именно ридером и будет.
Vasily
Вот у меня, например, реализация мтпрото
Ayrat
Руками? Через каждую функцию в потенциально большом наборе логики?
Руками? Ну там банальная функция (Next * Context) -> Task<Context> и ты их чейнишь. В жирафе немного другая сигнатура сделана для удобства, но композиция кляйзли для того и придумана
Ayrat
Ну это и есть ридерТ по сути.
Да я а курсе, но ты у меня спрашивал как ещё КРОМЕ ридера
Ayrat
И вот в обычном асп нет коре никакой композиции нет
Ayrat
Но тем не менее стейт запроса пропихивается
Vasily
Который лежит в базе и не жужжит
Vasily
Сообщению нах не впилось то, что в контексте, это важно модулю отправки/ получения
Vasily
Есть сообщение, есть контекст
Ayrat
Да
Vasily
И у меня, нету, блеать, монады ридер в коде
Vasily
Хотя неявно это она скорее всего
Doge
Но тем не менее стейт запроса пропихивается
Ну отличается оно только тем, что никто страшного слова РидерТ не говорит. Ну и заново пишут композицию каждый раз.
Daniil
на самом деле ридер удобно, но не очевидно для .NET
Daniil
вот нагуглил пример на фшарпе
Daniil
https://gist.github.com/Porges/df9b386a7e5383dbc857ea8fe49f4b95
Vasily
Хня
Daniil
типа нифига не очевидно откуда все это появляется
Ayrat
Короче, вы не поверите, но можно для хранения контекста создать нечто что этот контекст содержит. Ну и там функциями обмазать по кругу над таким контейнером. Назовем такие функции методами, а контейнер классом. Жалко его ещё в дотнет не завезли
Ayrat
Вот бы нам такой контейнер в ФП
Vasily
В общем, я к тому
Vasily
Что есть стиль академический
Vasily
А есть практический
Ayrat
Я так на жирафе пишу. С классами и композицией
Ayrat
Бомбит у обоих лагерей
Daniil
и получается весь код в классах?
Vasily
У меня даже mutable есть, и пока никто не умер
Ayrat
и получается весь код в классах?
Большая часть. Но это удобно, один раз депенденси в конструктор кинул и всё
Igor
Я так на жирафе пишу. С классами и композицией
И что классы хорошо композируются? Небось еще тесты моками обмазываешь?
Ayrat
А пришлось бы в каждую отдельную функцию кидать без классов
x
вечер каминь-аутов
Ayrat
i.gyazo.com/2f8bb5596fa23fe5c69222ce4d0e7d04.jpg О да, детка
Любая идея превращается в говно если исполнитель - молодец!
Igor
Обмазываю
Кстати, зачем тебе вообще жираф? Пиши сразу на asp net core (на c#, там и PM же завезли)
Daniil
жираф компактнее выходит жеж
Ayrat
Фшарп кстати сишурупу за щёку насовывает в ООП с фишкой - праймари конструктор
Vasily
Это да
Igor
жираф компактнее выходит жеж
> классы > компактность
Igor
Vasily
Там за две щеки
Ayrat
> классы > компактность
Ты не поверишь, с классами компактнее
Ayrat
Могу пример дать, покажешь как короче
Ayrat
Минут через 60. Детей уложу, до компа доберусь
Igor
Ты не поверишь, с классами компактнее
Да с тобой все понятно. Ты на C# 9 перекатишся, когда primary constructor завезут
Ayrat
Да с тобой все понятно. Ты на C# 9 перекатишся, когда primary constructor завезут
Ну не, ты покажешь как короче без классов и я сразу признаюсь что дебил
Vasily
На самом деле на f# значительно лаконичнее, чем аналогичный код на сишарп
Vasily
Это я не беру специфичные для языка кейсы
Vasily
Я где-то год назад баловался wpf на фшарпе
x
Ты не поверишь, с классами компактнее
а как же построение программы через композицию фунций, депенденси в паршиал апплай и тд? недостижимый идеал?
Vasily
Фишка в том, что без паршиал апплая в пару сотен функций можно обойтись
Ayrat
Вот представь апи с парой сотней реквестов разных, везде нужны одинаковые депенденси. Вот можно их получить один раз в конструктор. Или двести раз в двести функций
Vasily
Всего лишь добавлением () последним параметром
Ayrat
Я из модуля прям в таких случаях контекст хуярю
Не получается, так как депенденси получаются в композишн руте
Ayrat
А не в модуле где функции
Ayrat
Ну это и логично
Vasily
Тогда помогает разбитие функций по назначению
Vasily
Контекст обычно нужен тогда, когда основная поебота сформирована
Ayrat
Короче, покажу скоро
Vasily
И условно сериализована
Ayrat
Вот уже буквально вот вот
Ayrat
А может раньше
Vasily
Будь то жсон
Vladislav
А я хотел посмотреть кино, но вместо этого полтора часа фикшу софт на nas.
Vasily
Или httpmessage