Сообщение Re[5]: Как в C++ получить Redux и Redux Dev Tools от 03.01.2021 5:07
Изменено 03.01.2021 5:15 Артём
Тё>>5) Прицепленный на Redux RxJS: визуальные контролы подписываются на интересующие их переменные и автоматически перерисовываются.
SA>Оу йес! Если приложение на редакс представляет собой просто кучу не особо вонючего говна, то RxJs это верная специя для того, чтобы превратить кучу в кал мощный, едкий!
SA>Это отличный способ повысить нечитаемость кода на два порядка относительно размещения бизнес-логики в Button1Click, как в случае простого редакса!
SA>
SA>Что тут сказать? Это замечательный способ довести busFactor до единицы и замкнуть весь код на себе! И на месте нормального код ревьювера я бы за такое джоб сейфети расстреливал на месте for the Greater Justice! Но на твое счастье, Артемка, меня в ревьюверы не пускают. Поэтому мы продолжаем катиться туда, куда катимся, господа. Поаплодируем Артемкам! Mein Herz Brennt!SA>//pa ss this through constructor, DI or use singleton (but please don't)
SA>private final RetryManager retryManager;
SA>public void load() {
SA> Observable.combineLatest(
SA> repository.getSomething()
SA> .retryWhen(retryHandler ->
SA> retryHandler.flatMap(
SA> err -> retryManager.observeRetries())),
SA> localStorage.fetchSomethingReallyHuge()
SA> .retryWhen(retryHandler ->
SA> retryHandler.flatMap(
SA> nothing -> retryManager.observeRetries())),
SA> (something, hugeObject) -> new Stuff(something, hugeObject))
SA> .subscribe(stuff -> {}, err -> {});
SA>}
То, что вы привели, конечно, ужасное г-но. Спора нет.
Вот кусочек реализованной мной логики с вызовом NgRx (Redux скрещен с RxJS).
private initialiseEffects(): Observable<any> {
return merge(
// Update current section - on section click
this.actions$.pipe(
ofType(fromUserInputActions.sectionClickAction),
switchMap(this.onSectionClick$.bind(this)),
),
// Update current section - on crumb click
this.actions$.pipe(
ofType(fromUserInputActions.sectionCrumbClickAction),
switchMap(this.onCrumbClick$.bind(this)),
),
// Update current children
this.store.pipe(
select(getCurrentSection),
switchMap((current) => this.getChildren$(current, SectionService.filterSectionsForList)),
map((children) => fromSectionStateActions.storeSectionChildrenAction(children)),
),
// Update current crumbs
this.store.pipe(
select(getCurrentSection),
switchMap((current) => this.getCrumbs$(current)),
map((crumbs) => fromSectionStateActions.storeSectionCrumbsAction(crumbs)),
),
).pipe(
enterZone(this.ngZone),
catchError((error) => of(sectionErrorAction(error))),
);
}
Тё>>5) Прицепленный на Redux RxJS: визуальные контролы подписываются на интересующие их переменные и автоматически перерисовываются.
SA>Оу йес! Если приложение на редакс представляет собой просто кучу не особо вонючего говна, то RxJs это верная специя для того, чтобы превратить кучу в кал мощный, едкий!
SA>Это отличный способ повысить нечитаемость кода на два порядка относительно размещения бизнес-логики в Button1Click, как в случае простого редакса!
SA>
SA>Что тут сказать? Это замечательный способ довести busFactor до единицы и замкнуть весь код на себе! И на месте нормального код ревьювера я бы за такое джоб сейфети расстреливал на месте for the Greater Justice! Но на твое счастье, Артемка, меня в ревьюверы не пускают. Поэтому мы продолжаем катиться туда, куда катимся, господа. Поаплодируем Артемкам! Mein Herz Brennt!SA>//pa ss this through constructor, DI or use singleton (but please don't)
SA>private final RetryManager retryManager;
SA>public void load() {
SA> Observable.combineLatest(
SA> repository.getSomething()
SA> .retryWhen(retryHandler ->
SA> retryHandler.flatMap(
SA> err -> retryManager.observeRetries())),
SA> localStorage.fetchSomethingReallyHuge()
SA> .retryWhen(retryHandler ->
SA> retryHandler.flatMap(
SA> nothing -> retryManager.observeRetries())),
SA> (something, hugeObject) -> new Stuff(something, hugeObject))
SA> .subscribe(stuff -> {}, err -> {});
SA>}
То, что вы привели, конечно, ужасное г-но. Спора нет.
Вот кусочек реализованной мной логики с вызовом NgRx (Redux скрещен с RxJS).
private initialiseEffects(): Observable<any> {
return merge(
// Update current section - on section click
this.actions$.pipe(
ofType(fromUserInputActions.sectionClickAction),
switchMap(this.onSectionClick$.bind(this)),
),
// Update current section - on crumb click
this.actions$.pipe(
ofType(fromUserInputActions.sectionCrumbClickAction),
switchMap(this.onCrumbClick$.bind(this)),
),
// Update current children
this.store.pipe(
select(getCurrentSection),
switchMap((current) => this.getChildren$(current, SectionService.filterSectionsForList)),
map((children) => fromSectionStateActions.storeSectionChildrenAction(children)),
),
// Update current crumbs
this.store.pipe(
select(getCurrentSection),
switchMap((current) => this.getCrumbs$(current)),
map((crumbs) => fromSectionStateActions.storeSectionCrumbsAction(crumbs)),
),
).pipe(
enterZone(this.ngZone),
catchError((error) => of(sectionErrorAction(error))),
);
}
В первой строчке ваш соотечественник добавил говнеца
В оригинале ещё месяц назад было так:
private initialiseEffects(): Observable<
fromSectionStateActions.SectionStateAction | fromSearchWiseActions.SearchStartUIAction
> {
Блин какой же песец.