2016-12-21 7 views
3

こんにちは親愛なるスタックオーバーフローのコミュニティ、 私はangular2ソフトウェア設計上の問題に直面していると私はよりよい解決策だか分からないリゾルバ対ngOnInitとRESTデータを取得しますまたはリゾルバを使用しますか? 私はngOnInit-方法でデータをフェッチする問題に遭遇したことはありませんが、今、私はリゾルバについて聞いたと私は何を使用するかわからない:Angular2:ngOnInitで</p> <p>フェッチRESTデータ:

ngOnInit() { 
    this.authHttp.get('http://localhost:8080/configuration') 
     .map((response: Response) => <ConfigurationData>response.json()) 
     .subscribe(settings => this.settings = settings); 
} 

@Injectable() 
export class ConfigurationsResolver implements Resolve<ConfigurationData> { 
    constructor(private authHttp: AuthHttp) {} 

    public resolve(route: ActivatedRouteSnapshot): Observable<ConfigurationData> { 
     return this.authHttp.get('http://localhost:8080/configuration') 
      .map((response: Response) => <ConfigurationData>response.json()); 
    } 
} 

対リゾルバがつながりますはるかに多くのコードで。余分なクラス、プロバイダの宣言など。 あなたはどう思いますか?これに関するすべての声明とベストプラクティス?

答えて

0

エンタープライズアプリケーションをお持ちの場合は、RxJsを使用し、ロジックをサービス内に保持し、ルーターのひょうたんまたはコンポーネントでサービスを開始することをお勧めします。

または何かもっと賢いコードはngrx/storeを使用し、すべてのロジックをその状態に保ちます。

あなたが書いた選択の間に、私はむしろすべてのサービスを書いて、コンポーネントをきれいにしておきたいと思います。

0

サービスアプローチは、単一責任の原則とテスト容易性の面でよりクリーンです。

あなたのビジネスレイヤコンポーネントの1つが設定を必要としているとします。したがって、その必要性は「私は設定が必要です」と表現することができます。どのように入手するのか、それをどこで入手するのかは気にしません。必要なのは設定データだけです。したがって、このデータコンポーネントを取得するためには、「私の設定データを取得する方法を知っている人が必要です」という別のクエリが表示されるようになりました。これがあなたのサービスを注入する場所です。メインコンポーネントは、このデータがハードコードされているか、サーバからフェッチされているのか、何らかの形でランダムジェネレータから派生しているかどうかは気にしません。したがって、あなたの主なコンポーネントは、そのタスクに関連しないロジックを維持しないし、あなたのconfig fetcherは、このデータで何をすべきかに関するロジックを維持しません。それぞれには厳密に1つの責任があります。

これにより、簡単にテストすることができます。あなたは簡単に設定データフェッチャーコンポーネントを模擬し、あなたの主なコンポーネントにそれを注入することができます。簡単に制御できる条件でメインコンポーネントをテストする簡単な方法を提供します。モックされたコンポーネントを使用すると、正しいデータ、間違ったデータ、呼び出し失敗などを取得する方法をテストできます。あなたが望むものをシミュレートします。

0

レゾルバを使用すると、ターゲットコンポーネント内のコンポーネントはリゾルバでフェッチされたデータにアクセスできます。それはnginitメソッドの場合には当てはまりません。確認するためにテストする必要があります。

+0

そしてリゾルバのテクニックはもっと速いかもしれません。もう一度、あなたはdevツールを使って – ksayeh

関連する問題