2016-07-28 4 views
1

私はIonicを使って最初のAngular 2アプリを構築しており、いくつかのサービスを構築しています。このチュートリアルでは静的メソッドを使用していませんが、私にとっては、静的メソッドとプロパティが使用するようになっているようです。静的メソッドを使用しないように、次のようになります:角度2のサービスに静的クラスメソッドを使用しない理由はありますか?

import {MyService} from "../services/MyService"; 
@Component({ 
    templateUrl:"page.html", 
    providers: [MyService] 
}) 

export class MyNewClass{ 
    constructor(private myService: MyService){} 

    //to use: 
    this.MyService.get() 
} 

VS

import {MyService} from "../services/MyService"; 
@Component({ 
    templateUrl:"page.html" 
}) 

export class MyNewClass{ 
    constructor(){} 

    //to use: 
    MyService.get() 
} 

今私のユースケースでは、MyServiceデータは、全体のアプリ間で変更されません。データを一度に読み込み、アプリ全体ですべてを使用する必要があります。 MyServiceに、他のすべてのクラスが使用する情報を含む静的配列を持たせたいと思います。私の見解では、これはアプリケーション全体で1つのインスタンスが存在することは間違いありません。また、私はproviders: [MyService]を書く必要はなく、コンストラクタに注入する必要はありません。コンストラクタのパラメータを長さのために読めないようにしたくないので、私は非常に良いと思います。これに何か問題はありますか?

+1

標準的な議論のように私には思われます:このサービスを使うものをどうやってテストしますか?あなたは偽のバージョンのためにそれを交換することはできますか? –

+0

@Niklas B.テストするのはかなり簡単だと思われます。データの一部をハードコードして返すだけです。しかし、私はフレームワークのテストで多くの経験を持っていないので、それが問題であるかどうかを私に教えていただきたいと思います。 – user3413723

+1

私はあなたのサービスが、リクエストにモックレスポンスを返すことができるように構成可能かどうか、そしてそれを使用するコンポーネントはテスト可能であると思います。しかし、サービス自体はあまりに複雑すぎるようです –

答えて

2

providers: [MyService]を本当に嫌う人は、実際にアドバイスされた練習ではありませんが、ブートストラップすることができます:bootstrap(AppComponent, [MyService])

静的メソッドに対する短所のいくつかは以下のとおりです。

  1. サービスに標準イディオム/スタイルないこと:あなたは、人々は、あなたがそのようにそれを書く作るために、この場合には特別な何があるか尋ねる取得したいですまた、Style Guideに従うことを試みるのに苦労するかもしれません。

    • たぶん、あなたは、スタンドアロンの機能を実装し、それらを一般的に

      export function getStuff() { ... } 
      export function foo() { ... } 
      

      そして

      import { getStuff, foo } from './shared/stuff'; 
      
  2. をエクスポート検討すべきである、静的なものはただ難しい(以下ナチュラル)ですテスト環境や実際に実行時に(コード多態性を考える)コード内を置き換えることができます。

、それらの理由は、今あなたが、それはつまるところ言うことができる、(例えば、あなたのサービスで任意の角度を注射した機能の必要性は次のようになり、として)本当に技術的ブロックではありませんので、意見に。

あなたのテスト(別名テクニカル)のニーズが満たされている場合は、チームに相談し、誰もが最高だと思うものを使用してください。それらがテストの非標準的な方法でOKであり、そのサービスを使用しているなら、(それが動作する限り...)。

関連する問題