2016-07-28 23 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中有一個靜態數組,其中包含所有其他類使用的信息。在我看來,這樣做的好處是很明顯,整個應用程序中只有一個實例 - 沒有猜測。另外,我不必寫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. 一般

    ,靜態的東西又是很難(或不自然)在代碼中進行替換,無論是在測試環境中還是實際上只是在運行時(思考多態)。

現在,由於這些原因是不是一個真正的技術(如,例如,需要在服務中的任何角度注入功能會),現在你可以說這歸結意見。因此,如果你的測試(aka技術)需求得到滿足,與你的團隊交談,並使用大家認爲最好的(也就是解決意見事關老式的方式)。如果他們對測試和使用該服務的非標準方式正常,那就去做吧(只要它可以工作...)。

相關問題