2017-01-25 24 views
11

Podczas kodowania app z kątowe 2 i wielu usług obliczeniowych I napotykają na następujące pytania:Metody statyczne i kątowe 2 Usługi w JavaScript ES6

  1. Kiedy używać statycznych w Kątowymi usług świadczonych na poziomie aplikacji? Czy to nonsens?
  2. W jaki sposób metoda statyczna odzwierciedla wydajność? Powiedzmy, że kilka obiektów wywołuje w tym samym czasie tę samą statyczną metodę. Czy ta metoda jest tworzona więcej niż raz?

To jest bardzo proste klasy, która dostarcza mi wiele metod obliczeniowych i jest tworzony na poziomie aplikacji:

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

Dzięki za pomoc.

+0

statystyka prywatna? : o – DDRamone

Odpowiedz

15

1) statyczne metody klasy, w przeciwieństwie przykład metod należących do (są widoczne) samej klasy (nie instancja tego). Nie zależą od członków instancji klasy i zazwyczaj pobierają dane wejściowe z parametrów, wykonują na nich akcje i zwracają pewien wynik. Działają niezależnie.

Oczywiście mają one sens w usługach kątowych. Zdarzają się sytuacje, w których faktycznie nie potrzebujemy korzystać z instancji usługi i nie chcemy uzależniać się od niej, potrzebujemy jedynie dostępu do metod, które wykonuje nasza usługa. Tutaj statyczne członkowie pochodzą w

przykładzie stosując metodę statyczną określoną w służbie.

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) statyczne metody mają żadnego wpływu spektaklu. Jak stwierdziliśmy powyżej, nie zależą one od żadnej instancji klasy, a wywoływanie tych metod w żaden sposób nie wytworzy klasy.

Aby uzyskać więcej informacji, dobrze wyjaśniono: http://www.typescriptlang.org/docs/handbook/classes.html

2

Metody statyczne są reprezentowane jako zmienne globalne (myślę?) W aplikacji Angular, więc myślę, że byłyby tworzone tylko raz. Dlatego myślę, że nie miałoby to większego wpływu na wydajność (w porównaniu z instancją klasy dla każdego komponentu, który tego potrzebuje).

Używam statycznego, gdy nie chcę wstrzykiwać usługi i uzyskać instancję po prostu wykorzystać metody formatowania/użyteczności kontekstowo-agnostyczne. Wersje dla całej aplikacji nie wydają mi się nierozsądne.

+0

Jeśli tak jest, to jest niesamowite, zawsze myślałem, że musisz wstrzykiwać usługi, aby z nich korzystać: o – Chrillewoodz

+1

"Inject" jest dla procesu DI, wierzę, więc jeśli potrzebujesz instancji usługi, to należy wstrzyknąć. Jeśli jednak jest to klasa statyczna (tzn. Bez instancji!), To nie ma potrzeby instancji, więc nie ma potrzeby stosowania DI, a zatem nie ma potrzeby stosowania @Injectable :) – chrispy

+0

Ale jak utworzyć klasę statyczną? Jego przykład nie jest statycznym prawem klasowym? – Chrillewoodz