Anonymous
другой типичный пример - (чистое) подмножество rx
Фил Ранжин
Roman
эту мысль можешь развить? не знаком с этими атрибутами
типа такого:
public static TheoryData<Period, ZonedDateTime> NotSatisfiedMaxAdvanceSamples =>
new TheoryData<Period, ZonedDateTime>
{
{ Period.FromDays(30), Now.PlusHours(24 * 31) },
{ Period.FromDays(60), Now.PlusHours(24 * 61) },
{ Period.FromDays(7), Now.PlusHours(24 * 8) }
};
[Theory]
[MemberData(nameof(NotSatisfiedMaxAdvanceSamples))]
public void ShouldHaveAdvanceBookingRestrictionIfMaxAdvanceIsNotSatisfiedAndNoOtherRestrictions(Period maxAdvance, ZonedDateTime arrival)
{
var ratePlan = CreateRatePlanForAvailabilityTests(maxAdvance: maxAdvance);
ratePlan.HasAdvanceBookingRestriction(Now, arrival).Should().BeTrue();
}
Roman
чем это лучше моков?
тем, что это не завязано на внутреннюю имплементацию и не идет по пизде, когда кто-то вызвал другую перегрузку метода репозитория. Кода меньше в тестах без потери качества тестирования
Roman
То есть это позволяет blackbox тестинг. И тесты не дают false negative, когда ты вообще другую хуйню сбоку прикручивал
Roman
да и вообще, ИО — источник ошибок, и логика тоже. И легче эти ошибки отлавливать поотдельности, а не ковыряться в непонятной куче поломанного говна
Фил Ранжин
Фил Ранжин
и вот эта твоя мембер дата, она ведь тоже завязана на внутреннюю имплементацию
Roman
нет, она завязана на бизнес правила
Roman
а не на то, что дергается конкретный метод где-то в недрах тестируемого кода
Фил Ранжин
справедливо, кстати
Roman
кода меньше, если ты тестируешь много сценариев, а не только 1
Фил Ранжин
да, понял твою мысль
Фил Ранжин
спасибо
Фил Ранжин
насчёт мотивации у тимы
Roman
наздоровье!
Фил Ранжин
у разрабов всегда одна мотивация
Фил Ранжин
хуями поразмахивать
Фил Ранжин
в переносном смысле, если что
Roman
да хз. Встречал много таких, которым все похуям давно
Anonymous
ребят, искренне вас жаль. реально.
Anonymous
ну я хотя бы попытался
Vasily
Anonymous
так я выше отписал
Anonymous
но без толку
Anonymous
нипанятна
Anonymous
Roman
есть 2 стула: мучаться без паттерн матчинга с опшнами в сишарпе или мучаться с вездесущими исключениями в сишарпе. На какой сесть?
Vasiliy
😂😂😂 в c# наверное лучше исключения. ну придет после тебя новый разраба и начнет дальше кодить. Так он хотя бы что то сделает, а в случае с option нахер все сломает и еще скажет что ты дурак
Roman
да вот хер. У нас вся команда ценит детерменированность опшнов
Anonymous
Roman
так я и использую лямбды. Все равно выглядит вырвиглазно по сравнению с фаршем
Roman
и ведь сука все равно кидаю исключение, пушто резалт не завезли! О боги
Roman
ват?
Anonymous
должно выглядить почти также, за исключением мелких синтаксических различий. C#-версия getIther().Then(leftHandler, rightHandler).Then(anotherLeftHandler, anotherRightHangler);
Anonymous
вполне себе нормально выглядит
Roman
допустим, но какое это отношение имеет к чистым функциям?
Anonymous
не говоря уже о том, что кидать исключения - дурной тон
Roman
так ладно я все понял
Roman
я блять и сам знаю, что кидать исключения это дурной тон
Roman
но хули делать без DU
Anonymous
не кидать исключения
Anonymous
у вас на худой конец есть task, у которого есть исключения. и TaskCompletionSOurce, это если совсем своего ничего не хотите писать.
Anonymous
короче, детский сад, не иначе.
Doge
Anonymous
Смотря где и зачем кидать.
ну да. если реально тотальный невозможный непредвиденный ахтунг - то кидай себе на здоровье. но это означает, что полный пиздец произошел.
Hog
Anonymous
ну вон выше целая простыня со статической ересью и потом второй акт с отсутствие якобы выбора в C#
Anonymous
компакто в каком смысле? у тебя это заняло 5 строк. в те же пять строк я вложусь в C#
Roman
прошу
Anonymous
я тебе выше показал
Hog
прошу
Ограничения на длину строки есть?
Roman
Anonymous
единственный яввный минус C# - это руками Either<T1, T2>.Method() задавать типы.
Anonymous
вот и все.
Anonymous
что тоже можно пофиксить, на самом деле.
Anonymous
но там уже чуть хитрее будут api
Roman
я тебе выше показал
херня там показана. Там leftHandler и rightHandler определены заранее. Это тоже строки занимает
Hog
Anonymous
ну ту логику, что ты показал - это oneliner'ы
Anonymous
и там, конечно, лямбды
Hog
Ну и строчками меряться - это такоэ :)
Anonymous
та даже по таким злопидорским метрикам
Anonymous
все равно будет почти 1 в 1
Pavel
Pavel
никому не рассказывай
Vasiliy
😱
Vasiliy
ужас
Фил Ранжин
Фил Ранжин
исключения по мне - безумие
Фил Ранжин
с вэлютипами вообще лучше всего try паттерн
Anonymous
в каждую лямбду подпихивать уже типизированный eitherBuilder
Anonymous
на уровне API сами then/match/continueWith или как вы их там называете
Anonymous
не совсем. у тебя builder уже типизированный <TLeft, TRight>
Anonymous
что-то в стиле .Then((left, builder) => ..., (right, builder) => ...)