169 похожих чатов

Народ, подскажите пожалуйста, я реализую чат, клиент Angular. Смотрите, с сервера

у меня сообщения идут в таком виде:
[
{
content: "это текстовое сообщение",
type: 0,
....
},
{
image: {
id: 13,
url: "uploads/1/1/13.jpg"
},
type: 1,
....
}
...
]

Вопрос заключается в том, как мне можно повлиять на процесс десериализации, чтобы я мог создать на этом этапе два типа моделек моих сообщений - TextMessageModel и ImageMessageModel. Обе эти модельки наследуют от MessageModel, тем самым, хотелось бы от сервиса, который получает эти сообщения, ждать Observable<Array<MessageModel>>

Как такое замутить? Тут явно нужно влезть в процесс десериализации, и на основе type свойства создавать ту или иную модельку.

Я такое уже делал в dotnet для десктоп/мобильного клиента. На Angular как?

35 ответов

14 просмотров

там стандартный JSON.parse. Нет никакого определения типа. Тип уже сами на месте задаем через дженерик. О каком алгоритме кастомной десерелизации может идти речь?

Я использую либу class-transformer

Bretbas- Автор вопроса
Denis Makarov
там стандартный JSON.parse. Нет никакого определен...

Вот в dotnet я делал такой конвертер. встаивал его на клиенте в десериализатор, заменяя тем самым дефолтный. Тем самым получал то, что требуется

Denis Makarov
там стандартный JSON.parse. Нет никакого определен...

Там очень сильно конфигурируемый сериализатор, можно для типов поведение менять или вообще руками реализовывать

Observable<response>.pipe(map(data => {return new Model({data})}))

Bretbas- Автор вопроса

А что тебя смущает? Ты можешь в map описать любую логику и возвращать нужный тип.

Bretbas- Автор вопроса
Dmitry
А что тебя смущает? Ты можешь в map описать любую ...

Ну вообще так делают? Есть практика в данной ситуации, которую я описал? Или может по другому решают как то? Да, и как мне в зависимости от типа показывать разные presentation component сообщений в шаблоне?

Bretbas- Автор вопроса
Bretbas
Как то очень жестко получилось 😃

Уберите просто логику маппинга в отдельный метод и всё норм

Bretbas- Автор вопроса
Oleg Safonov
Уберите просто логику маппинга в отдельный метод и...

Блин, а как это теперь юзать то? Как показывать тот или иной presentation component в зависимости от типа сообщения?

Bretbas- Автор вопроса
Oleg Safonov
?

ну теперь в шаблоне то, мне нужно показывать разные виды presentation component в зависимости от типа сообщения

Bretbas
ну теперь в шаблоне то, мне нужно показывать разны...

Ну сделать у класса сообщения свойство type например

Bretbas- Автор вопроса
Bretbas- Автор вопроса
Oleg Safonov
Ну как вариант

а другой вариант? 😊 интересно же)

Bretbas
а другой вариант? 😊 интересно же)

Компоненты сильно различаются?

Bretbas- Автор вопроса
Oleg Safonov
Компоненты сильно различаются?

не особо, это абсолютно похожие сообщения как в телеге. Два типа —> сообщение текстовое, сообщение изображения

Bretbas
Как то очень жестко получилось 😃

сделай базовый интерфейс, от которого будешь наследоваться, реализуй общие методы, в дальнейшем в компонентах дергай их

Bretbas- Автор вопроса
Dmitry
сделай базовый интерфейс, от которого будешь насле...

базовый интерфейс сделан. методы? Я стараюсь в модельках их не делать. @skhrolenok , ща заценю

Bretbas- Автор вопроса
Dmitry
у тебя сообщения как приходят?

в плане как? С сервера? не понял вопроса

Bretbas
базовый интерфейс сделан. методы? Я стараюсь в мод...

по поводу методов в моделях - грешен, иногда делаю, видимо из-за того что я по большей части из мире бэка

Bretbas- Автор вопроса
Dmitry
по поводу методов в моделях - грешен, иногда делаю...

да я тоже с бека, но это не дает мне повода делать методы на лево и на право в моделях. Вот максимум могу сделать такие методы как фабричные

Bretbas- Автор вопроса
Bretbas
да я тоже с бека, но это не дает мне повода делать...

всегда есть исключения, как например в твоем случае

Bretbas- Автор вопроса
Bretbas- Автор вопроса
Dmitry
python, go

ага. я на asp.net core

Bretbas
ага. я на asp.net core

у нас в компании много чего на asp.net сделано)

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта