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 ответов

36 просмотров

там стандартный 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 сделано)

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта