我正面临 angular2 软件设计问题,我不知道什么是更好的解决方案:
在 ngOnInit 中获取 REST 数据还是使用解析器?
我从来没有遇到过在 ngOnInit 方法中获取数据的问题,但现在我听说过解析器,但我不确定要使用什么:
ngOnInit() {
this.authHttp.get('http://localhost:8080/configuration')
.map((response: Response) => <ConfigurationData>response.json())
.subscribe(settings => this.settings = settings);
}
Run Code Online (Sandbox Code Playgroud)
对比
@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());
}
}
Run Code Online (Sandbox Code Playgroud)
解析器会产生更多的代码。额外的类,声明一个提供者等等。
所以你怎么看?关于此的任何声明和最佳实践?
服务方法在单一职责原则和可测试性方面更加清晰。
假设您的业务层组件之一需要配置。所以它的需求可以表达为“我需要配置”。它不关心如何获取它、从哪里获取它等等——它所需要的只是配置数据,仅此而已。因此,为了获取此数据,组件现在表达了另一个查询 - “我需要知道如何为我获取配置数据的人”。这是您注入服务的地方。主要组件不关心这些数据是硬编码的、从服务器获取的还是以某种方式从随机生成器派生的 - 这不是它的事。因此,您的主要组件不会维护与其任务无关的任何逻辑,并且您的配置获取器不会维护任何有关如何处理此数据的逻辑。他们每个人都严格承担一项责任。
这样可以轻松测试它们。您可以轻松模拟配置数据获取器组件并将其注入到主组件中。它为您提供了在易于控制的条件下测试主要组件的简单方法 - 您的模拟组件允许您测试主要组件如何处理获取正确的数据、不正确的数据、调用失败等 - 因为它是您的模拟,所以它可以帮助您模拟任何你想要的东西。
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |