gpt4 book ai didi

Angular 2 : fetching REST-data with ngOnInit vs Resolver

转载 作者:太空狗 更新时间:2023-10-29 18:02:07 26 4
gpt4 key购买 nike

我正面临一个 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());
}
}

解析器会生成更多代码。额外的类,声明一个提供者等等。

那你怎么看?对此有何陈述和最佳实践?

最佳答案

服务方法在单一职责原则和可测试性方面更加简洁。

假设您的业务层组件之一需要配置。所以它的需求可以表达为“我需要配置”。它不关心如何获得它,从哪里获得它等等——它所需要的只是配置数据,仅此而已。因此,为了获取此数据,组件现在表达了另一个查询 - “我需要知道如何为我获取配置数据的人”。这是您注入(inject)服务的地方。主要组件不关心此数据是硬编码的、从服务器获取的还是从随机生成器以某种方式派生的——这不是它的事。所以你的主要组件不维护任何与其任务无关的逻辑,你的配置 getter 也不维护任何关于如何处理这些数据的逻辑。他们每个人都有严格的责任。

这样可以轻松测试它们。您可以轻松地模拟配置数据 getter 组件并将其注入(inject)到您的主要组件中。它为您提供了在易于控制的条件下测试主要组件的简单方法 - 您的模拟组件允许您测试主要组件如何处理获取正确数据、不正确数据、调用失败等 - 因为它是您的模拟,所以它可以帮助您模拟任何你想要的。

关于 Angular 2 : fetching REST-data with ngOnInit vs Resolver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41264764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com