Angular 2 服务...毫无意义?

Angular 2 Service... Pointless?

我已经使用 angular 2 大约 2 周了,我喜欢它,除了一件事……服务。虽然用了,为了顺应社会,但我不明白,希望有人能解释一下原因。

服务除了加载数据外什么都不做。更不用说 9/10 我将其注入的任何组件都必须具有类似的功能来处理返回的数据并使其可用。我对他们的另一个大问题是开销。比方说(按照英雄教程)我 运行 一个 ajax 请求(使用该服务)来创建一个英雄列表,我点击一个,现在我加载一个新页面,我收到 id 和运行 另一个使用相同服务的请求。

所以我不明白。为什么不将它创建得更像一个实例,其中数据只需要加载一次并且可以查询而不是发出全新的请求。更不用说返回实际数据而不是 promises/observable。如果有人可以解释这一点并告诉我我缺少什么,我会喜欢的。提前致谢。

服务封装业务关注点并将它们与 UI 关注点或控制器关注点分开,后者管理它们。

服务注重功能。 UI 专注于演示。 控制器专注于管理 UI 和服务交互。

好处是可维护性。 UI 逻辑与业务逻辑的分离旨在减少 UI 层与模型层之间的耦合,从而使设计更简洁,更易于开发、测试和维护。

在 Angular2 中:

class --> Controller
injectable services --> Model
component view template --> View

有一种情况是服务必不可少的;当你想在比父子树更深的树中的组件之间来回传递数据时。

例如,联系人应用程序。您可能有一个页面组件(一层)和一个联系人列表组件(两层),其中每个联系人都显示在一个组件(三层)中,以及地址的呈现(四层),phone 和电子邮件(又是第四层)由组件处理。您可能有另一个根分支,用于编辑具有自己的多级树的联系人。服务不是试图构建复杂和脆弱的组件间通信,而是简化了所有组件的数据获取和保存。

服务也可以提供设置和读取应用程序状态的方法。有几种不同的模式,要么使用 ngrx/store,要么使用基于可观察的状态系统。这完全不可能使用组件来完成。

示例应用程序可能有点矫枉过正,但想象一下您使用 http 调用加载列表的模式,然后在选择项目时加载描述事务的复杂数据结构。您与所选项目有一堆关系,您只想在选择时加载。

根据我的短暂经验,事情会很快变得非常棘手和复杂,所有这些看似不必要的事情都是对一个非常困难的问题的答案。