我有2个服务和1个组件:
服务
组件
ProductService.postProduct
方法向API端点发出POST
请求,该端点需要token
参数,该参数可通过AuthService.get_token()
方法获取。需要在ProductService
中使用ProductSubmitComponent
来提交新产品。
有两种方法可以做到这一点
1。
ProductService
导入并使用AuthService
获取令牌,而ProductSubmitComponent
不必关心将token
作为显式参数传递。
OR
2。
ProductService.postProduct
方法将token
作为显式输入参数,在请求服务方法时,必须由ProductSubmitComponent
作为附加参数提供。
这两种方式都应该有效,但我的困境是,我应该采用哪种方式?这个问题有效归结为:
在另一个 vs 服务中使用一个角度服务是否可以仅从指令/组件中使用而不是其他服务?
答案 0 :(得分:4)
我认为这取决于具体情况。如果您认为自己也会在其他组件中使用ProductService.postProduct
方法,那么ProductService
导入AuthService
会更有效率。
据我所知,在另一个服务中使用一个服务并不坏。我很确定你的AuthService
注入了Http
服务,这基本上是一样的:)
答案 1 :(得分:2)
如果您需要组件中的令牌,您应该问自己。
如果没有,那么组件不应该关心实现细节 - 它只需要发布产品。因此,如果ProductService可以自己获取令牌,那么应该这样做。
另外......
答案 2 :(得分:2)
保持每个服务松散耦合是最好的编码实践。你的第二种方式符合它。如果您应用第一种方法,则ProductService
将紧密耦合。
答案 3 :(得分:1)
我认为服务可以依赖于其他服务。
但是,我个人会考虑让AuthService
能够更改默认请求标头,以便在您不进行跨域请求时自动在每个API请求中包含令牌。
答案 4 :(得分:0)
只要你有一个有意义的记录良好的依赖注入层次结构,我就会注入所有内容。从长远来看,这将使测试更容易,因为有众所周知的依赖关系,您可以一目了然地看到需要提供或模拟的内容。