为什么将 Angular FormBuilder 创建为服务?

Why was the Angular FormBuilder created as a service?

我正在查看 FormBuilder Source Code 并注意到没有什么可以阻止它只是一个可以在组件中构建的常规 class。

他们为什么决定将其作为可注射服务?

好问题。很简单,减少耦合。我可以想到三个原因:

首先,要保持一致。 Angular 中的所有实用程序服务都是可注入的。如果你需要来自 Angular 的东西,你只需注入它就可以使用它。

其次,也是最重要的一点,要与未来兼容。假设有一天,Angular 团队决定 FormBuilder 有一个需要另一个服务的构造函数。例如:

export class FormBuilder {
  constructor(private someInternalService: SomeInternalService)
}

因为 FormBuilder 是可注入的,他们可以添加内部服务而不用担心在未来的版本中破坏兼容性。

最后,您还可以扩展自己的 FormBuilder 版本。假设您想创建一个路由器感知 FormBuilder。您可以简单地扩展 FormBuilder,并在某些 @NgModule 中提供它。此后,您可以使用自己的 FormBuilder 版本而不会破坏任何内容。