web-dev-qa-db-fra.com

Méthodes statiques et Angular 2 services en JavaScript ES6

Lors du codage d'une application avec Angular 2 et de multiples services de calcul), j'ai été confronté aux questions suivantes:

  1. Quand est-ce que j'utilise statique dans un service Angular fourni au niveau de l'application? Est-ce un non-sens?
  2. Comment une méthode statique se reflète-t-elle sur les performances? Disons qu'un couple d'objets hundret appelle en même temps la même méthode statique. Cette méthode est-elle instanciée plus d'une fois?

Ceci est un cliché de la classe, qui me fournit plusieurs méthodes de calcul et est instancié au niveau de l'application:

@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 {
    ...
  }
}

Merci pour ton aide.

19
Ore

1) Static Les méthodes d'une classe, contrairement à instance, appartiennent à (sont visibles sur) la classe elle-même ( pas une instance de celui-ci ). Ils ne dépendent pas des membres d'instance d'une classe et prendront généralement des entrées dans les paramètres, effectueront des actions dessus et renverront un résultat. Ils agissent de manière indépendante.

Ils ont un sens dans Angular services. Il existe des situations dans lesquelles nous n'avons pas réellement besoin d'utiliser une instance du service, et nous ne voulons pas en créer une nouvelle dépendance, nous Vous n'avez besoin que de l'accès aux méthodes proposées par notre service. Voici les membres static.

L'exemple d'utilisation de la méthode statique définie dans le service:

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) Static Les méthodes n'ont aucun impact sur les performances. Comme nous l'avons constaté ci-dessus, elles ne dépendent d'aucune instance de la classe et l'invocation de ces méthodes n'instanciera en aucun cas la classe.

Pour plus d'informations, il est bien expliqué sur: http://www.typescriptlang.org/docs/handbook/classes.html

27
Seid Mehmedovic

Les méthodes statiques sont représentées sous forme de variables globales (je pense?) Dans l'application Angular, je pense donc qu'elles ne seraient instanciées qu'une seule fois. Par conséquent, cela n'aurait pas un impact important sur les performances ( relative à une instanciation de la classe pour chaque composant qui en a besoin.)

J'utilise statique lorsque je ne souhaite pas injecter le service et obtenir une instance uniquement pour exploiter les méthodes de formatage/utilitaire indépendantes du contexte. Les versions de ces applications ne me semblent pas déraisonnables.

2
chrispy