Shub
сегодня полдня было потрачено на ошибку типа let event2Decoder m = JsonConvert.DeserializeObject<Event2Payload> m |> Event3
Vasily
На более универсальный тип
Shub
На более универсальный тип
ну вариантов всего два. record, в котором есть проперти type, и класс
Shub
я склоняюсь к классу, т.к. конструкторы и интерфейсы
Roman
доменная модель в данном случае — единый формат, в который ты хочешь привести данные из разных источников
Shub
доменная модель в данном случае — единый формат, в который ты хочешь привести данные из разных источников
не формат. данные. из всех сообщений надо достать количество ящиков и умножить их на количество бегемотов
Shub
Ну если под сртп загнать, то норм
я думаю просто дженериками обойтись
Shub
сам пейлоад может быть простым рекордом
Vasily
Сртп лучше тем, что нет наследования
Shub
мне вероятно потребуется наследование. я замутил прототип уже, вроде работает
Shub
наследование потребуется потому, что разные микросервисы имеют одинаковую проблему в принципе, но детали реализации разные.
Shub
то есть, два микросервиса слушают системы 1..3, еще два - системы 4..6
Shub
и соглашения насчет жсонов там разные, это несвязные между собой системы
Shub
вообще удивляет больше то, что тривиальная в любом другом языке задача выливается в просто титаническое усилие
Ayrat
Я наверное тупой и не понял проблемы
Ayrat
Хотя весь тред прочитал
Shub
ты можешь посмотреть на проблему в наших репах
Ayrat
Так это, чо мешает объявить рекорд и прям в него десериализовать?
Shub
ничего
Shub
посмотри просто на рекорд. там один пример, но остальные не меньше
Vladislav
Хотя весь тред прочитал
Я упустил вопрос
Vladislav
Тегнули бы его
Roman
Я наверное тупой и не понял проблемы
ты не один, я тоже слабо вкуриваю
Roman
Я упустил вопрос
как сделать, чтобы кода было мало, но он был рабочий и надежный, хотя задача ебанутая
Roman
у меня проблем таких не возникает
Shub
реальный мир - он такой, неудобный весь
Roman
если задача сложная сама по себе — то и код будет сложным
Vladislav
Сегодня 5ч фиксил билд. Пофиксил пустой папочкой
Shub
у меня проблем таких не возникает
я рад, что у вас все работает
Vladislav
Ayrat
https://pastebin.com/cScLnEBJ
вот это заняло 5 минут с перерывом на кормежку детей. type PoDetail = { PoNum: string PurchaseReferenceLineNumber: int PoQty: int } type WhsePackSell = { Value: double Uom: string } type Item = { ItemNumber: int ItemUPC: string CaseUPC: string PurchaseCompanyId: int FinancialReportingGroup: string BaseDivisionCode: string VendorPkRatio: int WarehousePkRatio: int UnitOfMeasurement: string AvailabletosellQty: int AvailableNonPickableQty: int ClaimsQty: int AllocatedQty: int FrozenQty: int OnorderQty: int PickedQty: int IntransitQty: int ProblemfreightQty: int ReceivedQty: int WorkInProgressQty: int QualitycontrolQty: int PoType: string ChannelType: string RotateDate: DateTimeOffset WhsePackSell: WhsePackSell OrderDetails: obj array PoDetails: PoDetail array PurchaseReferenceLineNumbers: int array } type TrackingEvent = { TrackingId: string ContainerId: int ContainerTypeAbbr: string CountryCode: string DcNumber: int DestinationLocationId: int ItemList: Item list ChildContainers: obj array RotateDates: DateTimeOffset array LotNumbers: obj array PoNums: int array IsNetItemWeightCalc: bool ItemWeightUOM: string ItemNetWeight: double IsContainerCubeCalc: bool ContainerCubeUOM: string ContainerCube: int ContainerCreatedDate: DateTimeOffset ContainerStatus: string IsShippable: bool IsReusable: bool DeliveryNumber: string LocationName: string LocationOrgUnitId: int WarehouseArea: obj } type SuperEvent<'a> = { Id: Guid CorrelationId: string User: string Event: string OccuredOn: DateTimeOffset EventObject: 'a }
Ayrat
Я может тупой, но есть специальный сайт который перегоняет жсоны в тип фшарпа
Ayrat
заняло бы 1 секунду
Shub
это не работает
Ayrat
ПАЧИМУ
Shub
потому что 50% полей optional
Ayrat
ну сделай их блять опшнал
Shub
null же ж нельзя
Ayrat
опять не вижу проблемы хоть убей
Shub
потому что ты не туда смотришь. сериализация - не проблема
Shub
ты вот завернул все событие в рекорд
Ayrat
нене, ты десериализуешь в такой рекорд
Ayrat
вот покажи в чом тут проблема
Roman
опять не вижу проблемы хоть убей
ты должен смотреть, пока не увидишь!!!!
Shub
ну ты понял, да?
Roman
ору
Ayrat
ну опшнал поля, вешай туда option
Ayrat
Я СУКА НЕ ПОНИМАЮ
Shub
вот покажи в чом тут проблема
по заветам одного поехавшего у нас в проекте вместо твоего SuperEvent пилят DU
Ayrat
какой нахуй ДУ
Ayrat
Что блять происходит
Ayrat
Я наверное тупой
Shub
такой. как в книжке
Shub
ты кстати почти мой код написал, только я класс взял вместо рекорда
Vasily
Долбоебы
Vasily
Обострение на фоне пандемии
Vladislav
Shub
та это еще раньше началось
Ayrat
Я короче не понял как тут оказались тайпшейпы и юнион декодеры. Когда задача про жсон
Ayrat
Пойду успокоюсь
Vasily
Пивка накати
Диёр
Тебе лишь бы выпить
Vladimir
мб там нужно именно десереализовать в типы типа String30?
Shub
представь, что вместо твоего SuperEvent<a'> код написан приблизительно как в моей первой ссылке (которую я открыть уже не могу, лол) ``` type MessageBody = {} type Message = { Id: Guid CorrelationId: string User: string OccuredOn: DateTimeOffset EventObject: EventBody} type MyEvent = Created of Message | Updated of Message | Deleted of Message | Missed of Message | Edited of Message | Appended of Message | Erased of Message | Acknowledged of Message | Received of Message | Stopped of Message | SentBack of Message | Packed of Message | Moved of Message... ( еще 15 кейсов) ```
Ayrat
мб там нужно именно десереализовать в типы типа String30?
Ну и что? У них должны быть конвертеры, это все на фоне происходит
Vasily
Ну вот хуйня написана
Shub
Ну и что? У них должны быть конвертеры, это все на фоне происходит
забудьте пока что про конверторы, родина нам дала DeserializeObject, на минуточку представьте, что кто-то всю эту простыню за вас уже написал
Shub
Ну вот хуйня написана
но... но... но как же наш ДДД мейд фанкшнл?
Shub
классы плохо, DU хорошо - вот это вот все?
Ayrat
забудьте пока что про конверторы, родина нам дала DeserializeObject, на минуточку представьте, что кто-то всю эту простыню за вас уже написал
JsonConvert.Deserialize<SuperEvent<TrackingEvent>>(jsonString, settings) Где в сеттингах указывашь весь свой набор кастомных конвертеров
Roman
Тебе лишь бы выпить
давай без алко шейминга
Vladimir
о, на пульсаре у меня почти так же)
Roman
но... но... но как же наш ДДД мейд фанкшнл?
влашин такой хуйни не советовал, не надо
Диёр
Я без шейминга