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