我在 angular2 应用程序中使用@ngrx/effects,并努力组织不同的效果定义。
我要实体,Identity
并且Subscription
,每个都有自己的 Actions 服务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))
从长远来看,这似乎更容易找到......但是在编写时感觉不太自然(我正在订阅服务中编写身份副作用......)
什么是久经考验的方法(如果甚至存在足够的时间)?