Anonymous
Так есть всегда можно дедовским фп методом - Reader и погнали. И ничего не надо прокидывать руками.
из коробки в дотнете же нет Ридера. то есть, это либо уМнЫй фреймворк, либо самописное решение. и в том, и в другом случае необходима достаточно высокая культура в команде.
Anonymous
что редкость.
Anonymous
ИМХО, этим всем гораздо легче навредить с точки зрения долговременных интересов проекта и "среднего на рынке" разработчика.
Anonymous
Ридер пишется за 3 минуты с закрытыми глазами, чуть ли не самая простая вещь для реализации
ну да. после того как потратил хренову тучу времени, чтобы разобраться с концептом и понять хоть примерно: зачем и почему.
Anonymous
Хаскель вообще простой на третий год изучения теорката.
Doge
Хаскель вообще простой на третий год изучения теорката.
Ну вот, опять мифология про хаскель от людей, которые на нем даже не пытались ничего написать. Язык как язык, никакого теорката не требует вообще. Где вы там его находите-то?
Anonymous
ты когда на ХаскельВики послдений раз заглядывал?\
Anonymous
а в чатике с Хаскелистами много знакомых слов для джава-разработчика?
Anonymous
они иногда даже вопрос не понимают как сформулироватьт\
Anonymous
а в си чатике?
хоть где-то меня нет!
Doge
а в чатике с Хаскелистами много знакомых слов для джава-разработчика?
Так это с каждым языком такое, вон пойди в какой-нибудь крестовый или растовый чат после джавы
Sergey
если ты писал на 8 джаве то я бы не сказал что хаскель сложный в понимании основы вот ниразу
Anonymous
удачи тебе с этими основами понять как сделать HTTP POST c треями ретраями. по крайней мере, я был в командах, где такие вещи просто вгоняли в ступор неподготовленных людей, из-за чего дальше протитипов Хаскель так и не пошел.
Anonymous
(но мне могло не везти ведь)
Anonymous
искренне рад за вас, если у вас иначе
Sergey
cоветую и хттп запросы там тоже есть и с пониманием поможет
Anonymous
А в чём проблема? В хаскеле это как раз проще всех остальных сделать. Ты попробуй на расте каком-нибудь, я посмотрю.
это в тебе просто опыт и привычка говорят, тут сытый голодному не товарищ. страшно далек ты от народа.
Shub
Чем это лучше прокидывания контейнера непонятно
тем, что некоторые по заветам одного нашего общего знакомого себе такую возможность отрезали и еще тем, что в эфшарпе нет собственного фреймворка, а сишарпные вынуждают писать сишарпный код, только с синтаксисом эфшарпа
Shub
статья выше довольно интересная, я даже попытался имплементировать в нашем проекте, но потом выпилил. потому что очень быстро IAppEnv превращается в помойку, в которой есть вообще все, и глядя на класс\функцию, которая его принимает вообще никак нельзя сказать, что именно из этого требуется, а что лишнее.
Shub
пробовал делать отдельные подтипы IAppEnv для разных модулей, но их [внезапно] расплодилось ровно по количеству таких модулей, и я так и не нашел оправдание, чем это лучше ручного прокидывания зависимостей через аргументы конструктора
Roman
эпизод с коммивояжерами в пустыне - топ.
я пока только до арахнида-телепата досмотрел
Shub
я пока только до арахнида-телепата досмотрел
шикарный минисериал. все серии крутые
Roman
серия крутая, хотя мне кажется, многие упустили суть)
Shub
там многие серии можно в целую киноленту развернуть.
Roman
Ага. Даже не знаю, хотел ли я, чтобы сняли подробней, или нет
Roman
Остается пространство для анализа и воображения, но с другой стороны, хочется знать, что же точно хотел сказать автор
Shub
Это ж и есть сервис локатор.
ну это такое. может и локатор, но суть не в этом. я до сих пор не вижу предложений, которые мне помогут абстрагировать слои. мы привыкли объединять код, обслуживающий определенную задачу, в один класс. набор методов шарит свои зависимости между собой, полностью скрывает детали реализации от клиента и т.д. и т.п. фактически я говорю "если бы у меня была БД и паблишер в топик - я бы мог процессить ваши заказы".
Shub
я не вижу, как модули с функциями могут быть альтернативой. факт нахождения функции в модуле вообще никак не говорит о ее связи с остальными функциями в этом модуле
Shub
если эти функции имеют общую задачу, то почему зависимости туда прокидываются индивидуально? что будет, если я забуду прокинуть новые зависимости в какую-то из функций?
Roman
если эти функции имеют общую задачу, то почему зависимости туда прокидываются индивидуально? что будет, если я забуду прокинуть новые зависимости в какую-то из функций?
на моем опыте разным функциям обычно требуются разные зависимости. Да, некоторые из них пересекаются, но далеко не все
Shub
короче, я захардкодил логгинг, потому что у нас теперь современный логгер и он не глушит энергоблоки АЭС. остальное - явно через конструктор
Roman
И непонятно, как ты забудешь прокинуть в функцию зависимость. Код не скомпилируется, если нормально написан
Shub
И непонятно, как ты забудешь прокинуть в функцию зависимость. Код не скомпилируется, если нормально написан
да как обычно. через год я забуду, что 101 функцию тоже надо поправить, и оно все соберется.
Roman
не понимаю, как соберется
Shub
а какая альтернатива?
я пока не нашел. перечитываю статью уже в 15 раз, надеюсь, что может упустил какую-то деталь. подход кажется перспективным
Anonymous
если эти функции имеют общую задачу, то почему зависимости туда прокидываются индивидуально? что будет, если я забуду прокинуть новые зависимости в какую-то из функций?
ты по-моему не тот вопрос себе задаешь. функциональное программирование называется "функциональным" именно потому, что сакральным центром всего и вся является именно функция. родство между ними - не более, чем историческая случайность, как одинаковый цвет глаз у двух прохожих на улице. да, у них есть общий генетический код, но это еще не повод настаивать на их единстве. то же самое и тут: модули на самом деле - обыкновенный способ упорядочивать функции каким-либо образом; здравый смысл диктует разделение по принципу предназначения, но это потребность проистекает совсем из другого источника - от программиста, которому сложно удержать в голове происходящее. по ходу этого образа мыслей, нет ничего ни плохого, ни противоественного в том, что одно и то же необходимо для выполнения разных функций того же самого модуля.
Anonymous
да и по правде сказать, в каждом проекте хватает грязных модулей, которые хранят в себе все то, что не нашло никакого другого места -- в тени или под солнцем.
Anonymous
и это не плохо, это еще раз доказывает то, что модули - не тот уровень упорядочивания в мире ФП. гораздо важнее сами функции, их сигнатуры и способность к композиции.
Roman
я пока не нашел. перечитываю статью уже в 15 раз, надеюсь, что может упустил какую-то деталь. подход кажется перспективным
ну у меня подход этот (даже упрощенная версия) пока что работает хорошо. А помойка лечится же разграничением контекстов обычно. Т.е. ты как правило можешь определить, что эта группа зависимостей нужна только в этой области приложения, а вот эта нужна в другой
Roman
И делаешь просто отдельные сегменты своего IAppEnv. Типа IPaymentProcessingEnv, ILogisticsEnv, IPricingEnv и тд
Roman
у меня сейчас контекст маленький, но 1 на все приложение. Хотя это скорее потому, что у нас большая часть контекстов сделана в виде ажурных функций и уже изолирована друг от друга
Shub
ты по-моему не тот вопрос себе задаешь. функциональное программирование называется "функциональным" именно потому, что сакральным центром всего и вся является именно функция. родство между ними - не более, чем историческая случайность, как одинаковый цвет глаз у двух прохожих на улице. да, у них есть общий генетический код, но это еще не повод настаивать на их единстве. то же самое и тут: модули на самом деле - обыкновенный способ упорядочивать функции каким-либо образом; здравый смысл диктует разделение по принципу предназначения, но это потребность проистекает совсем из другого источника - от программиста, которому сложно удержать в голове происходящее. по ходу этого образа мыслей, нет ничего ни плохого, ни противоественного в том, что одно и то же необходимо для выполнения разных функций того же самого модуля.
это очень большой вопрос, почему функциональное программирование называется функциональными. но тема не в этом. фпшечка в основной своей массе упирает на статические гарантии. модули как коллекции функций (в эфшарпе) статической гарантии связности функций не дают.
Shub
у меня сейчас контекст маленький, но 1 на все приложение. Хотя это скорее потому, что у нас большая часть контекстов сделана в виде ажурных функций и уже изолирована друг от друга
теоретически я могу тоже обойтись одним контекстом на микросервис. но по мере роста проекта какие-то компоненты будут шариться между сервисами, поэтому хотелось бы найти компромисс между одним огромным контектом и контекстами на каждый случай
Hog
я пока только до арахнида-телепата досмотрел
Их всем вразброс показывают. Нет четкого порядка серий.
Anonymous
это очень большой вопрос, почему функциональное программирование называется функциональными. но тема не в этом. фпшечка в основной своей массе упирает на статические гарантии. модули как коллекции функций (в эфшарпе) статической гарантии связности функций не дают.
так и в мире ООП нет гарантий, что то, что требуется условным конструктором, будет обладать внутренней связанностью и общим предназначением. это не проблема языка, это проблема решений программиста, который сам решает что такое "задача" и что такое ее "решение" с точностью до объектов или даже строчек кода.
Shub
Их всем вразброс показывают. Нет четкого порядка серий.
это кстати вовсе не сериал. это сборник короткометражных фильмов с разных там фестивалей
Roman
теоретически я могу тоже обойтись одним контекстом на микросервис. но по мере роста проекта какие-то компоненты будут шариться между сервисами, поэтому хотелось бы найти компромисс между одним огромным контектом и контекстами на каждый случай
Ну, не вижу ничего смертельного в большом кол-ве контекстов. Уверен, ты сможешь найти компромисс, по крайней мере во вменяемой скотобазе, над которой у тебя есть контроль
Shub
Ну, не вижу ничего смертельного в большом кол-ве контекстов. Уверен, ты сможешь найти компромисс, по крайней мере во вменяемой скотобазе, над которой у тебя есть контроль
у меня цель писать поменьше кода. если мне надо на каждый слой создавать по два интерфейса "просто потому", то я лучше буду прокидывать через конструкторы
Roman
у меня цель писать поменьше кода. если мне надо на каждый слой создавать по два интерфейса "просто потому", то я лучше буду прокидывать через конструкторы
интерфейсы кстати тебе еще помогают видеть, что используется конкретно тут, в твоем контексте. Ну, разумеется, я имею ввиду под контекстом что-то крупнее функции и обычно крупнее модуля.
Roman
Ну типа условный микросервис, например
Shub
ну вот вам пример. допустим, я логически скомпоновал свои функции в модуль, предположим они обслуживают одну конкретную цель, скажем, е-коммерс заказы, не суть. и вот есть этот модуль, весь из себя стройный, документированный, покрытый тестами. и есть мой коллега, тоже вроде не дурак, который сидит такой и "оу, вот прикольная функция по поиску и вот еще одна по сохранению в бд, дай-ка я их заюзаю, чтоб свои не писать"
Shub
всем понятно, к чему я веду, да?
Roman
нет
Anonymous
его право.
Shub
ну вот он заюзал эти функции. через месяц я узнал про домен побольше и решил рефакторить свой модуль с сохранением функциональности
Shub
в результате чего либо функции исчезли (потому что я решил взять другие структуры), либо сигнатуры поменялись
Shub
в результате ломается билд в моем PR
Roman
если он сослался на твой модуль из каких-то ебеней, то это уже его проблема. Если это в рамках твоего проекта, то это часть твоего контекста, и это нормально и даже хорошо, что такие ошибки вылезают на стадии компиляции
Shub
я в душе не чаю, как именно должен работать его код. идти и фиксить чей-то клиентский код у меня нет ни малейшего желания.
Anonymous
так правильно делает, что ломается. ты выставил публичный контракт. если это не публичные функции модуля, то они private и проблемы быть не могло. а так ты по принципу "возбудим и не дадим" попытался сыгратьт.
Anonymous
залил в мастер публчиную функцию - отвечай за бэквард компатибилити, все простор.
Shub
залил в мастер публчиную функцию - отвечай за бэквард компатибилити, все простор.
ага, то есть щас вы мне начнете рассказывать про модификатор private на модулях
Anonymous
ну у тебя в модулях че, нет приватных функций?
Shub
и буквально через 15 минут вы построите ООП, только из говна и палок модулей, функций, private и RequireQualifiedAccess
Anonymous
та нет, просто будут функции, которые не предназначены наружу и которые предназначены, за которые твой модуль поручился. и все.
Shub
на что я у вас спрошу: а зачем мне троллейбус из буханки хлеба?