簡體   English   中英

Angular2:使用 ngOnInit 與 Resolver 獲取 REST 數據

[英]Angular2: fetching REST-data with ngOnInit vs Resolver

我正面臨 angular2 軟件設計問題,我不知道什么是更好的解決方案:

在 ngOnInit 中獲取 REST 數據還是使用解析器?

我從來沒有遇到過在 ngOnInit 方法中獲取數據的問題,但現在我聽說過解析器,但我不確定要使用什么:

ngOnInit() {
  this.authHttp.get('http://localhost:8080/configuration')
      .map((response: Response) => <ConfigurationData>response.json())
      .subscribe(settings => this.settings = settings);
}

對比

@Injectable()
export class ConfigurationsResolver implements Resolve<ConfigurationData> {
    constructor(private authHttp: AuthHttp) {}

    public resolve(route: ActivatedRouteSnapshot): Observable<ConfigurationData> {
        return this.authHttp.get('http://localhost:8080/configuration')
            .map((response: Response) => <ConfigurationData>response.json());
    }
}

解析器會產生更多的代碼。 額外的類,聲明一個提供者等等。

所以你怎么看? 關於此的任何聲明和最佳實踐?

服務方法在單一職責原則和可測試性方面更清晰。

假設您的業務層組件之一需要配置。 所以它的需求可以表示為“我需要配置”。 它不關心如何獲取它,從哪里獲取它等等——它所需要的只是配置數據,僅此而已。 所以,為了獲得這個數據組件現在表達了另一個查詢——“我需要一個知道如何為我獲取配置數據的人”。 這是您注入服務的地方。 主要組件不關心這些數據是硬編碼的、從服務器獲取的還是以某種方式從隨機生成器派生的——這不是它的業務。 因此,您的主要組件不維護與其任務無關的任何邏輯,並且您的配置提取器不維護有關如何處理這些數據的任何邏輯。 他們每個人都有嚴格的責任。

這允許輕松測試它們。 您可以輕松模擬配置數據獲取器組件並將其注入您的主組件中。 它為您提供了在易於控制的條件下測試主要組件的簡單方法 - 您的模擬組件允許您測試主要內容如何處理獲取正確數據、錯誤數據、調用失敗等 - 因為它是您的模擬,它可以幫助您模擬任何你想要的。

如果您有企業應用程序,最好的方法是使用RxJs ,將您的邏輯保留在服務中並在路由器葫蘆或組件中觸發服務。

或者更高級和更多代碼使用ngrx/store並將所有邏輯保持在狀態中。

在這兩者之間選擇你寫的,我寧願把所有的東西都寫在服務中並保持組件清潔。

使用解析器,目標組件內的組件將能夠訪問解析器中獲取的數據; 而 nginit 方法不是這種情況......你需要測試它以確認

解析器在導航到路由之前執行,這樣您就可以避免在休息服務需要很長時間才能響應時顯示空模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM