Shub
сегодня полдня было потрачено на ошибку типа
let event2Decoder m = JsonConvert.DeserializeObject<Event2Payload> m |> Event3
Vasily
На более универсальный тип
Shub
я склоняюсь к классу, т.к. конструкторы и интерфейсы
Roman
доменная модель в данном случае — единый формат, в который ты хочешь привести данные из разных источников
Vasily
Shub
сам пейлоад может быть простым рекордом
Vasily
Сртп лучше тем, что нет наследования
Shub
мне вероятно потребуется наследование. я замутил прототип уже, вроде работает
Shub
наследование потребуется потому, что разные микросервисы имеют одинаковую проблему в принципе, но детали реализации разные.
Shub
то есть, два микросервиса слушают системы 1..3, еще два - системы 4..6
Shub
и соглашения насчет жсонов там разные, это несвязные между собой системы
Shub
вообще удивляет больше то, что тривиальная в любом другом языке задача выливается в просто титаническое усилие
Ayrat
Я наверное тупой и не понял проблемы
Ayrat
Хотя весь тред прочитал
Shub
ты можешь посмотреть на проблему в наших репах
Ayrat
Так это, чо мешает объявить рекорд и прям в него десериализовать?
Shub
ничего
Shub
посмотри просто на рекорд. там один пример, но остальные не меньше
Ayrat
Vladislav
Vladislav
Тегнули бы его
Roman
Roman
Я упустил вопрос
как сделать, чтобы кода было мало, но он был рабочий и надежный, хотя задача ебанутая
Shub
Roman
у меня проблем таких не возникает
Shub
реальный мир - он такой, неудобный весь
Roman
если задача сложная сама по себе — то и код будет сложным
Vladislav
Сегодня 5ч фиксил билд. Пофиксил пустой папочкой
Shub
Vladislav
Roman
Диёр
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
вот покажи в чом тут проблема
Shub
ну ты понял, да?
Ayrat
Roman
ору
Ayrat
ну опшнал поля, вешай туда option
Ayrat
Я СУКА НЕ ПОНИМАЮ
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 кейсов) ```
Vasily
Ну вот хуйня написана
Shub
классы плохо, DU хорошо - вот это вот все?
Vladimir
о, на пульсаре у меня почти так же)
Roman
Диёр
Я без шейминга