Я использую @ngrx/effects в приложении angular2 и борюсь с организацией различных определений эффектов.
У меня есть сущности Identity
и Subscription
, каждая со своими собственными службами действий IdentityActions
, SubscriptionActions
, а также своими службами эффектов IdentityEffects
, SubscriptionEffects
.
Определены следующие действия.
IdentityActions.AuthorizeIdentity()
IdentityActions.OnIdentityAuthorized(identity)
SubscriptionActions.GetSubscriptionList(identity)
SubscriptionACtions.OnSubscriptionsListed(subscriptions)
После авторизации удостоверения я сразу же хочу получить список его подписок. Как @ngrx/effects
поддерживает организацию этих эффектов, чтобы их можно было отследить/легко найти позже (например, через год)?
В IdentityEffects:
@Effect()
this._actions.ofType(authActions.AUTHORIZE_IDENTITY))
.switchMap(() => this.svc.AsyncAuth())
.switchMap((identity) => authActions.OnIdentityAuthorized(identity))
@Effect()
this._actions.ofType(authActions.ON_IDENTITY_AUTHORIZED)
.switchMap((identity) => Observable.of(action, subActions.GetSubscriptionList(identty))
Это кажется естественным при написании, потому что получение списка подписки является следствием авторизации личности... но меня это беспокоит, потому что, если разработчик когда-либо пытается отследить, откуда берется список подписки, это не так. Не интуитивно понятно копаться в IdentityService.
Альтернативой является регистрация второго эффекта в CustomerEffects, который не испускает..
@Effect({emit: false})
this._actoions.ofType(authActions.ON_IDENTITY_AUTHORIZED)
.switchMap((identity) => Observable.of(action, subActions.GetSubscriptionList(identity))
Кажется, что это будет легче найти в долгосрочной перспективе... Но при написании это кажется менее естественным (я пишу побочный эффект идентификации в службе подписки...)
Что такое проверенный временем подход (если времени вообще достаточно)?
action
в последнем фрагменте? Действие, вызвавшее эффект? Если да, то зачем его переиздавать? Его бы уже передали редукторам. И еслиGetSubscriptionList
обновляет какое-то состояние, используя какой-либо механизм, отличный от отправленного действия, то, что вы делаете, больше не является Redux. - person cartant   schedule 09.03.2017