golang 依赖循环的问题。

2024-08-09 17:31:51 +08:00
 awanganddong

service 层会调用 tasks 任务

tasks 任务里边也会循环调用自身。

然后就依赖循环了,对于这种,大家怎么解决。

现在最 low 的办法,就是直接写两份代码。

5876 次点击
所在节点    Go 编程语言
37 条回复
zihuyishi
2024-08-09 17:33:27 +08:00
抽出接口呗,这不是 jawa 常用手段,所以还是要多写写 jawa 呀
czyt
2024-08-09 17:34:36 +08:00
拆分
body007
2024-08-09 17:39:29 +08:00
A 依赖 B 的代码,和 B 依赖 A 的代码,提取出来放到 C 包里面,这样 A 依赖 C ,B 依赖 C 就行了。
FanGanXS
2024-08-09 17:40:24 +08:00
中间多加一层,让 service 依赖于这一层,task 也依赖这一层。
lt0136
2024-08-09 17:43:25 +08:00
最简单的办法:service 和 task 写在一个 package 里
fishofcat
2024-08-09 17:46:28 +08:00
抽象出来到别的包啊
maxwellz
2024-08-09 17:47:37 +08:00
哈哈哈,之前也遇到过,最简单的方法就是单独建一个包,让 A 依赖 C ,B 依赖 C ,要么就是通过接口来解耦
其实归结起来还是调用职责没划分好,要避免同级 package 互相调用
awanganddong
2024-08-09 18:09:24 +08:00
大家说的我理解了,但是我不知道怎么入手,有 demo 吗
yb2313
2024-08-09 18:26:54 +08:00
遇到这种我一般直接打屁股😡
povsister
2024-08-09 19:03:36 +08:00
遇到这种层次设计基本功有问题的,只能说
菜,就多练.jpg
younger027
2024-08-09 19:18:07 +08:00
人家问问题,你会就解答,不会就闭嘴。最烦 10 楼的,讲了一堆 pi 话,来显示自己来了?
yanyao233
2024-08-09 19:19:05 +08:00
@zihuyishi 你这个爪哇怎么还带口音的
Immortal
2024-08-09 19:28:39 +08:00
把公共部分抽出来,两个分别各自引用
weiwenhao
2024-08-09 19:46:39 +08:00
把循环调用自身的逻辑抽离出来,放在单独的 service 或者其他 tasks 里面。
yplam
2024-08-09 19:53:23 +08:00
参考依赖注入的模式,interface 抽出来,service 只依赖 interface ,然后在 main 或者写个容器进行服务初始化操作
yrj
2024-08-09 20:20:36 +08:00
设计的问题。task 的任务应该归 task 所有。不要拆到公共 service 里
fgwmlhdkkkw
2024-08-09 20:22:13 +08:00
Curtion
2024-08-09 22:09:51 +08:00
加中间层呀,还能怎么办
changz
2024-08-09 22:46:42 +08:00
爪蛙还是写得太少了 /狗头
gam2046
2024-08-09 23:29:34 +08:00
@awanganddong #8

ModuleA 需要调用 ModuleB.foo
ModuleB 需要调用 ModuleA.foo

---

现在创建一个 ModuleC ,把原本 A/B 内的方法移过来,fooA/fooB

ModuleA 调用 ModuleC.fooB
ModuleB 调用 ModuleC.fooA

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

https://ex.noerr.eu.org/t/1063855

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

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

© 2021 V2EX