为什么将 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
版本而不会破坏任何内容。
我正在查看 FormBuilder Source Code 并注意到没有什么可以阻止它只是一个可以在组件中构建的常规 class。
他们为什么决定将其作为可注射服务?
好问题。很简单,减少耦合。我可以想到三个原因:
首先,要保持一致。 Angular 中的所有实用程序服务都是可注入的。如果你需要来自 Angular 的东西,你只需注入它就可以使用它。
其次,也是最重要的一点,要与未来兼容。假设有一天,Angular 团队决定 FormBuilder 有一个需要另一个服务的构造函数。例如:
export class FormBuilder {
constructor(private someInternalService: SomeInternalService)
}
因为 FormBuilder
是可注入的,他们可以添加内部服务而不用担心在未来的版本中破坏兼容性。
最后,您还可以扩展自己的 FormBuilder
版本。假设您想创建一个路由器感知 FormBuilder
。您可以简单地扩展 FormBuilder
,并在某些 @NgModule
中提供它。此后,您可以使用自己的 FormBuilder
版本而不会破坏任何内容。