в настоящее время наша команда разработала простое приложение angular 6 с несколькими компонентами, и они работают правильно, но мы знаем, что эти компоненты уже слишком связаны друг с другом (они слишком много знают о себе). Поэтому, естественно, мы хотим перейти к решению развязки, такому как популярная шина событий/сообщений внутри приложения angular 6.
Таким образом, компоненты вместо того, чтобы подписываться друг на друга, должны знать только о шине сообщений и заботиться только о том, что публикуется в шине и подписывается на нее.
Этот пример реализации основан на классе Подписка, но, согласно Интернету, лучшим решением было бы использовать ПоведениеТема.
Итак, у меня есть несколько вопросов:
стоит ли менять Subscription -> BehaviorSubject?
импортировать {Injectable} из '@angular/core'; импортировать {Observable, Subject} из 'rxjs/Rx'; импортировать {filter, map} из 'rxjs/operators';
интерфейс экспорта IClassConstructor { новый (...аргументы: любой[]): T; }
интерфейс экспорта IMessage { канал: функция; содержание: любое; } /** простая шина сообщений публикации/подписки на основе классов для обеспечения несвязанной связи событий, действий и команд */ @Инъекционный() экспортировать класс MessageService { личное сообщение = новая тема();
public publish<T>(messageInstance: T): void { // Flux/Redux: 'dispatch'
const channel = messageInstance.constructor;
this.message.next({'channel': channel, 'content': messageInstance}); // Redux: {'type': string, 'payload': any }
}
public subscribe<T>(messageClass: IClassConstructor<T>): Observable<T> {
const channel: IClassConstructor<T> = messageClass;
return this.message.pipe(
filter((message: IMessage) => {
return message.channel === channel;
}),
map((message: IMessage) => {
return message.content;
})
);
}
}
сложно ли переключить мышление и кодирование на использование Flux?
Совсем нет, тб. Это просто трудно начать с этого, но это действительно легко.





Если ваше приложение является корпоративным или достаточно большим, рассмотрите возможность использования архитектуры Флюс. Я использую его ежедневно, и он отлично работает с большими приложениями (~300 контейнеров, ~1500 компонентов).