Vasily
типа module CreditCard=...
Roman
реальный код по модулям я разнесу, но на презентации нужно будет людям как-то дать биг пикчер
Shub
и безотносительно дто\без дто, метод validatePaymentMethod явно проблемный.
Shub
сделай с ним что-то и для примера сойдет
Shub
ну может нейминг там
Vasily
Я бы validatePayment разнес на цепочку етодов
Shub
Roman
Shub
на рекордах методы - просто аугментация, они могут возвращать что хочешь
Romɑn
!!!!!
Romɑn
На этом фото — Варвара Караулова и Айрат Саматов. Он родом из Казани, судим за хранение наркотиков, с 2015 года — боевик и вербовщик ИГИЛ. К нему, бросив семью и дом, пыталась сбежать юная студентка МГУ.
Как они познакомились, как развивались их отношения и чем ему удалось зацепить ее — скоро расскажем.
x
x
Roman
Viacheslav
Shub
x
Shub
если у тебя парсинг жсона просто вызов Json.DeserializeObject<DtoType> - то вот тут как раз стоит проверять на пустые строки и сразу же сигналить назад, что не то прислали
Shub
десериализация разная бывает
Roman
Shub
я считаю, что невалидные значения транспортного уровня надо ловить как можно ближе к транспортному уровню, а не пытаться отсигналить откуда-то из ядра луковки
Shub
Shub
клерк следит, чтобы документ был правильно заполнен - без пропусков, без помарок. если это не так - клерк орет и кидает тебе документы в рожу
Roman
для этого клерк должен знать доменные правила
Shub
Roman
то есть это не то, когда ты в число попытался строку записать
x
Shub
Roman
я про жсон
Shub
я тоже
Крылатый
Vladislav
Shub
но даже если это возможно, то парсинг - самое время для проверки
Shub
и только если документ заполнен - клерк складывает их в стопочку от других посетителей и потом несет всю стопочку в бухгалтерию
Крылатый
Shub
орать на клерка в бухгалтерии бессмысленно - посетитель мог выйти из приемной
Shub
орать на просетителя из бухгалтерии тоже бессмысленно - можно не докричаться
x
Roman
всего лишь правила заполнения документов
если пеймент метод кеш, то чек инфо и кредит карт инфо должны быть пустые. Если метод кредит кард — то должно быть только кард инфо. Это все должно быть на транспортном уровне?
Shub
твоя валидация может быть отделена от фронтенда очередью, разными там кафками и прочим
Shub
Shub
т.к. это взаимоисключающие варианты
Roman
так оно в домене так и представлено
Roman
но мне, допустим, это надо отправить в сишарпный микросервис
Roman
у них нет ду
Roman
что предлагаешь?
Shub
type PaymentMethodDto =
{ CreditCardInfo: CreditCardInfoDto option
ChequeInfo: ChequeDto option
PaymentMethodType: PaymentMethodType }
Shub
вот это заменить на DU
Shub
у тебя 66% полей optional
Roman
Roman
Shub
что предлагаешь?
какая разница, есть у них du или нету? у тебя есть с ними контракт
Shub
твой слой сериализации будет производить нужный документ
Roman
да, и в контракте вот такой жсон, который 1 в 1 соответствует дто, которую я написал
Shub
Shub
тебя беспокоит, что ты не сможешь производить жсон в одну строчку, что ли?
Roman
ну пока я не понимаю, как условный ньютонсофт мне распарсит это в ду
Shub
ньютонсофт разумеется не распарсит в соответствии с контрактом. и никто не распарсит, тебе придется это пилить самому
Shub
что не так уж и сложно
Roman
пилить десериализацию для каждого доменного типа отдельно, так?
Shub
для дто
Roman
ну ок, для каждой отдельной дто
Shub
тебе придется ее пилить все равно, т.к. контракты имеют тенденцию меняться
Roman
чем это отличается концептуально от того, что я написал? То же кол-во кода, те же правила, только называется deserializePaymentMethod а не validatePaymentMethod
Shub
сейчас ты подстраиваешь свой дизайн под конкретную версию реализации одной конкретной библиотеки
Roman
хотя хз насчет кол-ва кода, скорее всего десериализаторы такие писать дольше
Shub
что как бы странно с точки зрения дизайна
Shub
и если ты с этим аспектом согласен, то проверка примитивных типов в слое сериализации имеет смысл, особенно с учетом проблемы того толстого метода
Roman
я не понимаю, почему ты считаешь, что у меня явный контракт выполняется неявно
Roman
и под какую библиотеку как я подгоняю свой дизайн
Shub
потому что у тебя дто структурированы так, чтобы ньютонсофт производил оговоренный с третьей стороной жсон, по твоим словам