可以使用另一个角度服务吗?

时间:2016-07-12 08:43:05

标签: angular angular2-services

我有2个服务和1个组件:

服务

  • AuthService
  • ProductService

组件

  • ProductSubmitComponent

ProductService.postProduct方法向API端点发出POST请求,该端点需要token参数,该参数可通过AuthService.get_token()方法获取。需要在ProductService中使用ProductSubmitComponent来提交新产品。

有两种方法可以做到这一点

1。 ProductService导入并使用AuthService获取令牌,而ProductSubmitComponent不必关心将token作为显式参数传递。

OR

2。 ProductService.postProduct方法将token作为显式输入参数,在请求服务方法时,必须由ProductSubmitComponent作为附加参数提供。

这两种方式都应该有效,但我的困境是,我应该采用哪种方式?这个问题有效归结为:

在另一个 vs 服务中使用一个角度服务是否可以仅从指令/组件中使用而不是其他服务?

5 个答案:

答案 0 :(得分:4)

我认为这取决于具体情况。如果您认为自己也会在其他组件中使用ProductService.postProduct方法,那么ProductService导入AuthService会更有效率。

据我所知,在另一个服务中使用一个服务并不坏。我很确定你的AuthService注入了Http服务,这基本上是一样的:)

答案 1 :(得分:2)

如果您需要组件中的令牌,您应该问自己。

如果没有,那么组件不应该关心实现细节 - 它只需要发布产品。因此,如果ProductService可以自己获取令牌,那么应该这样做。

另外......

  • ...在单元测试中模拟该服务更容易
  • ......到处都没有重复的代码

答案 2 :(得分:2)

保持每个服务松散耦合是最好的编码实践。你的第二种方式符合它。如果您应用第一种方法,则ProductService将紧密耦合。

答案 3 :(得分:1)

我认为服务可以依赖于其他服务。

但是,我个人会考虑让AuthService能够更改默认请求标头,以便在您不进行跨域请求时自动在每个API请求中包含令牌。

答案 4 :(得分:0)

只要你有一个有意义的记录良好的依赖注入层次结构,我就会注入所有内容。从长远来看,这将使测试更容易,因为有众所周知的依赖关系,您可以一目了然地看到需要提供或模拟的内容。