可以手动将服务实例作为参数传递给对象吗?

时间:2018-10-06 06:01:45

标签: angular typescript angular-services

如果我使用服务封装对象集合(数据模型的通用模式),那么将服务实例传递给集合中的每个对象是一种好的设计实践吗?

我没有看到任何负面影响,因为该服务只会根据需要生成新对象来存储数据,因此这里的“摇树”并没有太多优势,并且试图使Angular注入看起来像这样麻烦多于其价值。

我在这里想念东西吗?

3 个答案:

答案 0 :(得分:2)

服务是一个广泛的类别,涵盖了应用程序需要的任何价值,功能或功能。服务通常是具有狭窄,明确定义目的的类。它应该做一些特定的事情并做好。

Angular将组件与服务区分开来,以提高模块化和可重用性。通过将组件的与视图相关的功能与其他类型的处理分开,可以使组件类更加精简和高效。

理想情况下,组件的工作是实现用户体验,仅此而已。组件应该提供用于数据绑定的属性和方法,以便在视图(由模板呈现)和应用程序逻辑(通常包括一些模型概念)之间进行中介。

组件可以将某些任务委托给服务,例如从服务器获取数据,验证用户输入或直接登录到控制台。通过在可注入服务类中定义此类处理任务,可以使这些任务可用于任何组件。您还可以根据情况在不同情况下注入不同种类的相同服务的提供商,从而使您的应用更具适应性。

Angular不执行这些原则。 Angular确实可以帮助您遵循这些原则,因为它可以轻松地将应用程序逻辑分解为服务,并通过依赖注入使这些服务可用于组件。

答案 1 :(得分:0)

是的,我认为您可能缺少一些东西。

通常公认的设计目标是“松耦合”。能够在其他实现中进行交换的能力是使用注入的主要原因。

即使您永远不会交换服务的其他实现,通过注入提供它也使测试变得更加容易。如果使用注入,则可以轻松地从测试中注入模拟服务,这样您就可以真正地对组件进行单元测试。

答案 2 :(得分:0)

最重要的是:从Angular组件或服务创建自定义类只是按照预期的方式使用Typescript。

但是,您将需要手动将任何服务注入实例化的每个子对象中,否则将其传递给父类的实例。

在大多数情况下,从性能的角度来看这不是问题,因为仅在实例化父对象的情况下才实例化子对象。

相关问题