依赖注入 or 全局变量

53 天前
 ultimate42

最近在学习 go 语言,在使用 db 和限定返回结果时,先是参照了 gin-vue-admin,使用了全局变量,这样使用的确很简单,但每次都要引入全局包,看站内帖子又说不使用依赖注入不好做单元测试,所以你们倾向哪种方案?

  1. 全局变量
// hanlder

resp := response.PageResponse{
    List:     users,
    Total:    total,
    Page:     p,
    PageSize: ps,
}

response.SuccessPage(c, resp)

// service

global.DB.First...

  1. 依赖注入
// hanlder
// func (h *UserHandler)...

resp := h.PageResponse()
resp.List = users
resp.Total = total
resp.Page = req.Page
resp.PageSize = req.PageSize

h.SuccessPage(c, resp)

// service 
// func (userService *UserService) ...

userService.db.first...
    
  1. 最简单的方式
c.JSON( http.StatusOK, gin.H{
    "list":     users,
    "total":    total,
    "page":     req.Page,
    "pageSize": req.PageSize,
})
1755 次点击
所在节点    Go 编程语言
19 条回复
CoderGeek
53 天前
一直在用 uber-go/fx
ultimate42
53 天前
@CoderGeek 我也是用的 fx ,因为对 go 不熟悉,代码还是参考 ai 的,勉强算是跑起来了
fgk
53 天前
一个人写就全局变量,方便。
多人协同依赖注入,避免问题
fruitmonster
53 天前
我最开始就是用的全局变量,初始化的时候全部都初始化为全局变量,然后 Gemini 一顿给我优化,优化的晚就是依赖注入,感觉全局变量更容易理解,依赖注入更容易单元测试
fengyj
53 天前
wire 依赖注入
hwdq0012
53 天前
应该抽象的就依赖注入没啥 好说的, 全局变量+里氏替换 不如直接依赖注入
darksword21
53 天前
如果你在写的项目是公司的并且已经很大了且已经有依赖注入的机制那就依赖注入

其他时候:全局变量
bv
53 天前
1. 不要 x 场景用全局变量,y 场景用依赖注入,就养成个用依赖注入的习惯。
2. 依赖注入框架不一定要用什么框架。
changz
53 天前
全局变量写飞容易出现 cycle import 问题
moooooooo
53 天前
这是 or 的问题吗?为什么要用全局变量啊
picone
53 天前
@changz 循环引用和是否用依赖注入没关系。 就算是依赖注入该引用的还是引用。
ultimate42
53 天前
@moooooooo 我是新手呀,在参考 gin-vue-admin 的实现,但这个项目我看着很难受。数据库字段是驼峰和下划线连接混用,返给客户端的数据也是大小写开头都有
wfhtqp
53 天前
context
MagicLi
53 天前
看一个比较简单的依赖库,https://github.com/samber/do
wire 适合大规模项目。
5261
53 天前
这也是之前遇到的问题,目前还是用 fx 依赖注入,只不过写的时候有点麻烦
Gilfoyle26
53 天前
《不好做单元测试》在公司里面,我从来没有写过测试代码,代码还没上线,团队就没了,又到新的项目了
fgwmlhdkkkw
53 天前
额,也推荐一下我写的依赖注入。

https://github.com/zzztttkkk/dic
changz
52 天前
@picone 我说的是“全局变量容易出现 cycle import”,而不是“依赖注入能解决什么问题”。而且是“容易”,不是“一定会”。至于为什么,这是工程实践问题,麻烦自己问一下 ai 。
meepolee
45 天前
可以对比 gin-vue-admin 和 gin-admin 的代码感受下依赖注入和全局的异同,项目小,全局足以,多人合作或者项目大了,依赖注入是最好的

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

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

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

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

© 2021 V2EX