Roman
если номера нет
ты про то, что 1234 1234 **** 1234 не расрапсится в DigitString? Ok, поменяю
Shub
твои же валидаторы уже чекают доменные типы, что есть проблема, т.к. технически ничего не мешает создать невалидное значение доменного типа, а валидатор можно банально не вызывать
Shub
поэтому резоннее поменять определение типа так, чтобы невалидное значение невозможно было создать штатными средствами
Shub
эм, у меня тут невалидное значение не создать
зачем ты его валидируешь тогда?
Hog
зачем ты его валидируешь тогда?
ну для того, чтобы не создалось 😊
Roman
эти валидаторы трансформируют валидные дто в доменные типы, либо возвращают ошибку
Roman
это не те, что кидают исключения в рантайме
Shub
ничего не смущает?
Roman
трансформируют
Vasily
@atsapura , заметь, ты сам просил тебя выпороть
Roman
я ничего против не имею
Shub
трансформируют
тогда это трансформаторы, не так ли?
Roman
Но хочу, чтобы пороли за дело, а не просто так)
Roman
тогда терпи!
если чо, я ни к кому тут претензий не имею
Roman
тогда это трансформаторы, не так ли?
то есть ты с неймингом не согласен?
Shub
type ValidateCreditCardInfo = CreditCardInfoDto -> Result<CreditCardInfo, ValidationError> какая роль DTO в этой сигнатуре?
Hog
тогда это трансформаторы, не так ли?
это чо-то из электрики :)))
Shub
то есть ты с неймингом не согласен?
я не согласен с простынями однообразных методов, которые по эффективности приблизительно равны молитвам о здравии
Shub
например строка 108
Shub
у тебя там комбинаторный взрыв
Vasily
Накапайте дедушке валерьянки
Vasily
И глицерина под язык
Roman
у тебя там комбинаторный взрыв
для того, чтобы давать разные ошибки. Как ты это по-другому сделаешь?
Shub
василий, тебе по сути есть что возразить или ты просто хочешь поучаствовать в дискуссии?
Hog
И глицерина под язык
а глицерин-то зачем?
Hog
он же противный
Roman
можно конечно одну гигантскую ошибку возвращать на все неправильные варианты с полным текстом правил валидации данных, но это такое
Ayrat
Да чо вы приебались?)
Shub
что не так с эффективностью?
у тебя уже есть дто, как ты сказал - валидный. ты его зачем-то проверяешь еще раз и конвертируешь, причем исходный и целевой тип практически идентичны.
Hog
Да чо вы приебались?)
Присоединяйся!
Shub
парси уже тогда транспортный тип, жсон или что там у тебя
Roman
дто может быть валидный и не валидный
x
type ValidateCreditCardInfo = CreditCardInfoDto -> Result<CreditCardInfo, ValidationError> какая роль DTO в этой сигнатуре?
Тут же вроде норм, в ней хранится нечто прилетевшее с фронтенда например
Roman
если он валидный, я его конвертирую в доменный тип, если нет — возвращаю ошибку.
Ayrat
Присоединяйся!
Не могу, у меня до сих пор пердак горит от той ебанины по мотивам Игры Престолов
Roman
Весь процесс назвал валидацией. Если есть лучшие идеи для нейминга — слушаю
Shub
если он валидный, я его конвертирую в доменный тип, если нет — возвращаю ошибку.
я понимаю, что ты делаешь. я не понимаю, зачем. только потому, что влашин написал?
Vasily
Вообще, конечно, функция validatePaymentMethod выглядит странно
Ayrat
осталось 3 (три) недели потерпеть 😊
меня вообще разорвёт наверное
Roman
я понимаю, что ты делаешь. я не понимаю, зачем. только потому, что влашин написал?
Затем, чтобы в домене невалидное состояние невозможно было создать. Но такие вещи в жсон например нормально не пропихнешь и в базу не засунешь
Vasily
Ну как по мне, рекорды тут выбраны не совсем удачно
Shub
т.к. валидатор могут и не вызвать
Roman
т.к. валидатор могут и не вызвать
так пускай создают как угодно. Внутри рекордов конструкторы с приватными типами
Roman
все вот эти DigitString, LetterString и тд
Roman
тут просто в добавок есть код, который позволяет эти доменные классы связать с реальным миром
Shub
так пускай создают как угодно. Внутри рекордов конструкторы с приватными типами
ну так это гарантирует валидное состояние в любом случае, разве нет?
Hog
так пускай создают как угодно. Внутри рекордов конструкторы с приватными типами
ээээ мммм... ну создал ты DigitString - а где гарантия валидности?
Roman
и непустота
Sergey
Да просто сломайте ему код и все🌚
Roman
ээээ мммм... ну создал ты DigitString - а где гарантия валидности?
type DigitString = private DigitString of string with member this.Value = match this with DigitString str -> str static member create str = create (neither isWhiteSpaceString nonDigitsRegex.IsMatch) DigitsOnlyAllowed DigitString str
Hog
Да просто сломайте ему код и все🌚
звучит как призыв сломать ноги :))))
Sergey
звучит как призыв сломать ноги :))))
Заметь я не скзаал не ломайте ноги🌚
x
запрет создания невалидных значений гораздо проще сделать на конструкторах типов
Это наверное для простой валидации какой-то, но обычно требуется что-то где-то поискать или кого-то дернуть. Неужели всё это делать в конструкторе
Shub
это просто не выражается типами.
Shub
но перекладывать примитивные типы из одной структурки в другую - это просто приближать тепловую смерть вселенной
Vasily
Ну рекорды в данном случае порождают нехилую такую простынку матчей
Roman
так это дто. Как по-другому сделать?
Vasily
type PaymentMethod=|CreditCard of CardInfo etc
Hog
я допускаю валидацию бизнес правил. скажем, проверять, что чек не выписан самому себе
а чо - из одного банка в иной так нельзя самому себе деньги "перевести"?
x
так это дто. Как по-другому сделать?
По моему они намекают, что дто не нужно и надо сразу парсить джесон в домен 🤔
x
Но это неточно.
Shub
это пример был
Shub
ясно, что для банковских переводов будут другие правила
Roman
По моему они намекают, что дто не нужно и надо сразу парсить джесон в домен 🤔
а если этот жсон — контракт между микросервисами, некоторые из которых написаны не на фшарпе, и там нет ду?
Vasily
Я бы для ясности все же по модулям разносил
Vasily
Для начала