2017-01-25 6 views
11

私は、次の質問に直面した2角度と複数の計算サービスとアプリのコーディング中:静的メソッドとJavaScript ES6の角2つのサービスが

  1. 私は、アプリケーションレベルで提供アンギュラサービスに静的使うのですか?それはナンセンスですか?
  2. 静的メソッドはパフォーマンスにどのように反映されますか?いくつかのオブジェクトが同じ静的メソッドを同時に呼び出しているとします。このメソッドは複数回インスタンス化されていますか?助けるため

    @Injectable() 
    export class FairnessService { 
        constructor(){} 
        private static calculateProcentValue(value: number, from: number): number { 
        return (Math.abs(value)/Math.abs(from)) * 100; 
        } 
        public static calculateAllocationWorth(allocation: Allocation): number { 
        ... 
        } 
    } 
    

    感謝を:

このは私に、複数の計算方法を提供し、アプリケーションレベルでインスタンス化されるクラスのスナップです。

+0

private static? :o – DDRamone

答えて

15

1)クラスの静的方法は、インスタンス方法とは異なり、に属する()クラス自体(ないことのインスタンス)に表示されています。クラスのインスタンスメンバーに依存せず、通常はパラメータからの入力を受け取り、アクションを実行して結果を返します。彼らは独立して行動する。

もちろん、Angularサービスでは意味があります。サービスのインスタンスを実際に使用する必要はなく、新しい依存関係を作りたくない場合があります。サービスが提供するメソッドへのアクセスのみが必要です。ここで静的メンバーが来る

サービスで定義された静的メソッドの使用例:

import { FairnessService } from './fairness.service'; 

export class MyComponent { 

    constructor() { 
     // This is just an example of accessing the static members of a class. 
     // Note we didn't inject the service, nor manually instantiate it like: let a = new A(); 
     let value = FairnessService.calculatePercentValue(5, 50); 
     let value2 = FairnessService.calculatePercentValue(2, 80); 

     console.log(value); // => 10 
     console.log(value2); // => 2.5 
    } 
} 

2)静的方法は何ら影響性能を有していません。上記で確認したように、クラスのインスタンスには依存せず、これらのメソッドを呼び出すことは決してそのクラスをインスタンス化しません。

詳細については、よく説明されています。http://www.typescriptlang.org/docs/handbook/classes.html

2

スタティックメソッドは、Angularアプリケーションではグローバル変数(私は思うか?)として表されているので、それらはそれぞれ一度だけインスタンス化されると思います。したがって、パフォーマンスに大きな影響はないと思う(それを必要とする各コンポーネントのクラスのインスタンス化に対して)。

私はサービスを注入してインスタンスを取得したくないときに静的を使用する文脈にとらわれないフォーマット/ユーティリティ方法を活用する。これらのアプリケーション全体のバージョンは私にとって不合理ではないようです。

+0

それは驚くべきことですが、私はいつもあなたがそれらを使用するためにサービスを注入しなければならないと思っていました: – Chrillewoodz

+1

"インジェクション"は私が信じるDIプロセスのためのものです。注入する必要があります。しかし、それが静的クラス(つまりインスタンスはありません)の場合、インスタンスの必要はないので、DIの必要はありません。したがって、@注射可能なものは必要ありません。 – chrispy

+0

しかし、どのように静的クラスを作成しますか?彼の例は静的なクラスの権利ではありませんか? – Chrillewoodz

関連する問題