Service 调用问题

2020-05-14 09:09:01 +08:00
 rainbowyao

Service 调用 Service 合理么?某一 service 中封装的逻辑在其他 service 直接调用,不然就存在逻辑复写了。网上看了很多有说合理,也有说不合理的。但没有具体的说明原因。不存在 Service 互相调用,应该都是单向调用。

3397 次点击
所在节点    Java
22 条回复
sheeta
2020-05-14 09:12:36 +08:00
ServiceManager 如何
ebingtel
2020-05-14 09:18:00 +08:00
不合理感觉……潜在的问题是: 导致循环引用……可以在上层进行组合调用多个 service
rainbowyao
2020-05-14 09:19:07 +08:00
@ebingtel 组内开发人员都约束一样,约定只能单向调用应该就不存在循环引用了
rainbowyao
2020-05-14 09:19:39 +08:00
@sheeta 没怎么用过啊
ebingtel
2020-05-14 09:27:21 +08:00
@rainbowyao 业务 service 多了 是怎么保证单向调用对 肉眼么? 方法就是: 绝对不允许 service 之间调用
Egfly
2020-05-14 09:31:32 +08:00
Service 之间应该不能调用。如果发现有共用的逻辑,可以考虑再抽出一层,比如 logic
securityCoding
2020-05-14 09:44:16 +08:00
不合理 , 往下抽一级出来 , 我习惯命名 component , 可以看看阿里巴巴开发手册关于项目结构命名的规范
yeqizhang
2020-05-14 09:50:26 +08:00
分层这么严格的吗?我之前都是有注入其它 service,也没遇到什么问题。
不知道这么写会有什么问题?有问题之后尽量不这么写了……
DebugTy
2020-05-14 09:56:24 +08:00
dao -> repository -> service
rainbowyao
2020-05-14 10:09:46 +08:00
这么一看好像都是反对的声音,学习了
wysnylc
2020-05-14 10:10:46 +08:00
可以互相调用,要不然怎么重用????
yidinghe
2020-05-14 10:13:39 +08:00
Service 和 service 之间应该存在领域划分,应该职责边界合理分明,这样做的目的是保持数据的内聚性,避免胡乱调用导致低性能。
xuanbg
2020-05-14 10:17:00 +08:00
1 、搞一个公共类,两个 services 都调用公共类里面的静态方法。
2 、搞一个基类,两个 services 都继承这个基类。
miniliuke
2020-05-14 10:24:56 +08:00
@yidinghe service 之间的交互通过 Eventbus 吗?总感觉这样写出了减少了耦合但是代码不可读性上升了......搞个更高层的 Service 做代理?有什么好的解决方案么?
mazyi
2020-05-14 10:49:29 +08:00
业务 service 互相不能掉,还有基础 service 嘛。不要局限于 service,应该看看构架啦。
yidinghe
2020-05-14 10:51:15 +08:00
@miniliuke 如果合理的分类和命名 event/publisher/handler,并且能够在 IDE 中追踪,其实代码可读性并没有受到太大影响。比如说我有个事件 UserLoginEvent,那么代码中要有一个约定,就是所有构造 UserLoginEvent 对象的地方一定是发布事件的地方,所有将 UserLoginEvent 对象作为参数的方法一定是处理事件的方法。如果不遵守这个约定,比如将 UserLoginEvent 对象到处传递,这就影响代码可读性了。
ZSeptember
2020-05-14 10:52:23 +08:00
可以相互调用的。
optional
2020-05-14 10:54:32 +08:00
可以互相调用啊,否则为什么封装 service,不过循环引用尽量避免。
nutting
2020-05-14 11:19:47 +08:00
spring 可以自己解决循环依赖吧
iffi
2020-05-14 11:29:07 +08:00
facade 即可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671464

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX