у меня сообщения идут в таком виде:
[
{
content: "это текстовое сообщение",
type: 0,
....
},
{
image: {
id: 13,
url: "uploads/1/1/13.jpg"
},
type: 1,
....
}
...
]
Вопрос заключается в том, как мне можно повлиять на процесс десериализации, чтобы я мог создать на этом этапе два типа моделек моих сообщений - TextMessageModel и ImageMessageModel. Обе эти модельки наследуют от MessageModel, тем самым, хотелось бы от сервиса, который получает эти сообщения, ждать Observable<Array<MessageModel>>
Как такое замутить? Тут явно нужно влезть в процесс десериализации, и на основе type свойства создавать ту или иную модельку.
Я такое уже делал в dotnet для десктоп/мобильного клиента. На Angular как?
там стандартный JSON.parse. Нет никакого определения типа. Тип уже сами на месте задаем через дженерик. О каком алгоритме кастомной десерелизации может идти речь?
Я использую либу class-transformer
Вот в dotnet я делал такой конвертер. встаивал его на клиенте в десериализатор, заменяя тем самым дефолтный. Тем самым получал то, что требуется
Там очень сильно конфигурируемый сериализатор, можно для типов поведение менять или вообще руками реализовывать
Observable<response>.pipe(map(data => {return new Model({data})}))
Хороший вариант)
А что тебя смущает? Ты можешь в map описать любую логику и возвращать нужный тип.
Ну вообще так делают? Есть практика в данной ситуации, которую я описал? Или может по другому решают как то? Да, и как мне в зависимости от типа показывать разные presentation component сообщений в шаблоне?
Как то очень жестко получилось 😃
Уберите просто логику маппинга в отдельный метод и всё норм
Блин, а как это теперь юзать то? Как показывать тот или иной presentation component в зависимости от типа сообщения?
ну теперь в шаблоне то, мне нужно показывать разные виды presentation component в зависимости от типа сообщения
Ну сделать у класса сообщения свойство type например
ну оно есть. по нему switch?
Ну как вариант
а другой вариант? 😊 интересно же)
Компоненты сильно различаются?
не особо, это абсолютно похожие сообщения как в телеге. Два типа —> сообщение текстовое, сообщение изображения
сделай базовый интерфейс, от которого будешь наследоваться, реализуй общие методы, в дальнейшем в компонентах дергай их
базовый интерфейс сделан. методы? Я стараюсь в модельках их не делать. @skhrolenok , ща заценю
у тебя сообщения как приходят?
в плане как? С сервера? не понял вопроса
по поводу методов в моделях - грешен, иногда делаю, видимо из-за того что я по большей части из мире бэка
да я тоже с бека, но это не дает мне повода делать методы на лево и на право в моделях. Вот максимум могу сделать такие методы как фабричные
всегда есть исключения, как например в твоем случае
ну да, как и в любом деле)
python, go
ага. я на asp.net core
у нас в компании много чего на asp.net сделано)
Обсуждают сегодня