Vladislav
по именно плагину фшарпа
Ayrat
по именно плагину фшарпа
Ну кстати да. Но чот после райдера никакого интереса на студию нет
Ayrat
Ну может из-за замарина
Ayrat
У вас там своя атмосфера
Ayrat
Vladislav
Ну может из-за замарина
да привык просто, да и не мешает особо
Roman
ой вей. Чувак решил, что эксепшены непростительны вообще никогда, поэтому у нас теперь все доменные ошибки содержат of msg:string * source:string
Roman
собери свой стектрейс сам
Roman
влашин абсолютно не при чем тут
Vasily
собери свой стектрейс сам
Ну похож на долбоеба
Shub
у нас есть вот такой код вообще type Result<‘a> = Result<‘a, string list> без иронии
Shub
влашин абсолютно не при чем тут
это из примеров в его блоге вообще-то
Roman
передавайте привет этому вашему Влашину
ей богу, ты иногда ругаешься на, вроде бы, правильные вещи, но из-за плохой имплементации клеймишь всю идею.
Shub
Красота
ну а зачем тебе знать, что там произошло, хочешь разобраться? читай сообщение. и апишечка очень простая, есть всего два кода - 200 и 500
Shub
кинь ссылкой
брошу, когда найду. я решил бороться с врагом его же оружием, поэтому щас продираюсь через тысячи пустопорожних постов в его бложике. не могу сходу вспомнить, где именно. но я найду
Roman
А что мешало эксепшн передавать так? А-ля Try из скалы
да я пытался объяснить, что для доменных ошибок нужно резалт без стектрейса, а для багов исключения, но убедить не смог
Shub
да я пытался объяснить, что для доменных ошибок нужно резалт без стектрейса, а для багов исключения, но убедить не смог
ну там тема в том, что и Влашин свое мнение поменял. сейчас он именно это и предлагает
Shub
но когда он знакомился, то или в целях краткости, то ли еще по какой-то причине написал такой пример
Roman
ну там тема в том, что и Влашин свое мнение поменял. сейчас он именно это и предлагает
короч независимо от влашина, переизобретать исключения — говно идея
Shub
это очевидно и бесспорно
Roman
зато у нас на проекте работает Альфонсо, который Фейбл
Shub
еще в вашу копилку говно идей: переизобретать классы с помощью рекордов и модулей
Roman
еще в вашу копилку говно идей: переизобретать классы с помощью рекордов и модулей
если ты про то, что нужно классы использовать, чтоб зависимости внедрять типа IRepository -> IService то ну его нахуй.
Shub
но и наколенные решения в стиле “давайте передавать функции” тоже не работают за пределами тривиальных ситуаций
Shub
но я вообще про попытки сэмулировать поведение классов вплоть до наследования с помощью рекордов
Shub
возможно, я бы понял замысел, будь там мотивация кроме “ооп - ХАРАМ"
Roman
ну мотивация харам это всегда залупцы
Shub
А ВДРУГ МЫ ВОЗЬМЕМ РАЗРАБОТЧИКА ИЗ СОСЕДНЕЙ КОМАНДЫ, ОН ЖЕ МОЖЕТ РАСТЕРЯТЬСЯ!
Doge
но и наколенные решения в стиле “давайте передавать функции” тоже не работают за пределами тривиальных ситуаций
Имхо, тут простое правило: передаешь больше одной-двух функций в один метод, делаешь что-то не то.
Shub
Имхо, тут простое правило: передаешь больше одной-двух функций в один метод, делаешь что-то не то.
это хорошая позиция, когда ты пишешь код с нуля и имеешь возможность структурировать код так, что каждый метод\функция имеет одну зависимость (кстати тоже так себе подход, но хоть что-то)
Shub
проблема возникает, когда код модифицируется и выясняется, что надо докинуть еще одну зависимость.
Shub
и даже если у тебя их становится 2 вместо 1 - у тебя все равно два десятка каскадных изменений
Shub
чисто для аккомодации новой сигнатуры. А - Архитектура
Roman
фри монада/интерпретатор в помощь!
Roman
а чистые функции можно прям из чистых функций вызывать, не передавая параметром
Shub
фри монада/интерпретатор в помощь!
это все равно что дать девелоперам скляночку амила с барбитурой и разбитое зеркало
Doge
почему?
В изоляции сложнее тестировать
Shub
почему?
потому что логика имеет тенденцию меняться, и какие-то ее части хотелось бы зафиксировать тестами
Roman
Doge
поясни
Ты не можешь честный юнит тест на функционал этой конкретной функции написать
Roman
Ты не можешь честный юнит тест на функционал этой конкретной функции написать
ты про то, что чистые функции напрямую в чистых функциях вызывать не стоит или про фримонаду/интерепретатор?
Yurii
Ты не можешь честный юнит тест на функционал этой конкретной функции написать
это получается надо запускать из функции только функции, которые пришли с аргументов?
Doge
поясни
Это я не про интерпретатор, а про вызов конкретных чистых функций из других чистых функций
Shub
совершенно верно \
Shub
как частичное решение - ок, но надо что-то делать с другими кейсами тоже
Shub
или например апишечка. у нас ванильный asp.net, он весь объектный.
Doge
это получается надо запускать из функции только функции, которые пришли с аргументов?
Либо те, чьей функционал не меняется в рамках доменной области
Yurii
ок, понял что имеешь ввиду
Roman
к слову о тестировании, управлениями зависимостями и хороших решениях: у нас на верхнем уровне они просто гвоздями друг к другу прибиты. Походу, для того, чтобы проверить разные сценарии, нужно менять данные в тестовой базе.
Romɑn
https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-3-0-preview-9-and-entity-framework-6-3-preview-9/ Все ещё не прочитал, но наконец-то в EF не будет скрытно, исполняться кол на клиенте. Минус выстрел в ногу
Doge
проблема возникает, когда код модифицируется и выясняется, что надо докинуть еще одну зависимость.
Ну всегда можно передавать их сгруппированными в класс/интерфейс/рекорд. Или что уж, класс тогда делать с конструктором.
Shub
Ну всегда можно передавать их сгруппированными в класс/интерфейс/рекорд. Или что уж, класс тогда делать с конструктором.
вот тут и находится камень преткновения, как правило, особенно когда на проекте есть ненулевое количество ебнутых на голову пуристов (и по совместительству криптохаскеллистов)
Vladimir
А как насчет чтобы такие функции превратить просто в набор вызовов других функций и не покрывать юнит тестом? У меня такая идея пришла что если все вызываемые функции проюнитесчены то их композиция посути уже тоже проюниттесчена автоматом
Shub
Ну, имхо, именно хаскеллисты скорее против неконтролируемых побочных эффектов будут, а не против классов
это очень сильно зависит, на какой стадии заболевания они находятся. поэтому на все надо смотреть в контексте их анамнеза
Vladimir
Ну выходит что может быть неправильная композиция сама
а это покрывается интеграционными тестами, тебе не нужно давать инпутов и смотреть аутпуты, оно всегда либо работает правильно или всегда неправильно
Shub
я не могу вспомнить ничего, чтобы это гарантировало
Shub
как ты удостоверишься, что все инварианты покрыты: все ошибки обработаны, все краевые случаи в логике и т.п.?