1

angular2 アプリケーションで @ngrx/effects を使用しており、さまざまなエフェクト定義の構成に苦労しています。

エンティティ と が必要IdentitySubscription、それぞれ独自のアクション サービスIdentityActionsSubscriptionActions効果サービスIdentityEffectsがありSubscriptionEffectsます。

以下のアクションが定義されています。

IdentityActions.AuthorizeIdentity()
IdentityActions.OnIdentityAuthorized(identity)
SubscriptionActions.GetSubscriptionList(identity)
SubscriptionACtions.OnSubscriptionsListed(subscriptions)

ID が承認されたら、すぐにそのサブスクリプションのリストを取得したいと考えています。これらの効果の組織化をどのように@ngrx/effects提唱して、後で追跡可能/見つけやすくするか (たとえば、今から 1 年後)?

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)) 

サブスクリプション リストを取得することは、承認された ID の結果であるため、これを書くときは当然のように思えます...しかし、開発者がサブスクリプション リストがどこから取得されているかを追跡しようとしている場合、それはそうではないため、私は心配しています。 IdentityService を掘り下げるのは直感的です。

別の方法は、発行しない CustomerEffects に 2 番目の効果を登録することです。

@Effect({emit: false})
this._actoions.ofType(authActions.ON_IDENTITY_AUTHORIZED)
  .switchMap((identity) => Observable.of(action, subActions.GetSubscriptionList(identity)) 

これは長期的には見つけやすいように思えます...しかし、それを書くときはあまり自然に感じません(サブスクリプションサービスでアイデンティティの副作用を書いています...)

実績のあるアプローチは何ですか (十分な時間があれば)?

4

1 に答える 1

1

ここにはたくさんの素晴らしいフィードバックはありませんが、私が行った方向性をフォローアップしたいと思います.

私は、効果の原因ではなく、影響を受けるエンティティによって効果をグループ化することが最も理にかなっていると判断しました。

95% の確率で、これにより、1 つのエンティティに関連する効果サービス定義が生成されます。ただし、場合によっては、別のものを参照する 1 つまたは 2 つの効果が存在する可能性があります。

この例では、ID が認証されているため、サブスクリプションが読み込まれます。

IdentityEffectsService.ts

@Effect()
public AuthorizeIdentity$ = this._actions.ofType(AUTHORIZE_IDENTITY)
  .switchMap(() => this._identitySvc.Authorize())
  .map(identity => this._identityActions.OnIdentityAuthorized(identity))

@Effect()
Public OnIdentityAuthorized$ = this._actions.ofType(ON_IDENTITY_AUTHORIZED)
  .do(identity => console.log(`${identity.name}` logged in!`));

SubscriptionActionsService.ts

@Effect() ListSubscriptions$ = this._actions.ofType(LIST_SUBSCRIPTIONS)
  .map(action => <Identity>action.payload)
  .switchMap(identity=> this._subscriptionSvc.List(identity))
  .map((subs) => this._subscriptionActions.OnSubscriptionsListed(subs))

@Effect() OnSubscriptionsListed$ = this._actions.ofType(ON_SUBSCRIPTIONS_LISTED)
  .do(action => console.log(`${action.payload.length} subscriptions listed.`)

/ * This was the effect in question.
    I've grouped it with the other subscription effects because I believe it
    will be more natural for someone trying to understand how subscriptions
    get filled to find it here in the future. 
*/
@Effect() OnIdentityAuthorized$ = this._actions.ofType(ON_IDENTITY_AUTHORIZED)
  .switchMap(identity => this._subscriptionActions.ListSubscriptions(identity))

明らかに、中規模/大規模プロジェクトで @Effects パターンの経験が豊富な人が参加してくれることを望んでいます.

于 2017-03-20T04:42:18.743 に答える