不同语言的项目结构都不太一样的,就像 MVC 并不是 Java 的专属,但是现在提到 MVC 大家都会提到 Java ,从而到 spring/spring Boot 。
这里推荐一个项目结构,它并不是 golang 官方的标准,再加上阿里的 Java 开发手册,如下所示:
像 internal 这种就可以根据自己的需求来,我是参考了阿里的 Java 开发手册还有之前在上海实习的时候的项目结构。
这是我写的博客中一部分,附上博客链接( https://shuimo03.github.io/)
1
cooper 2022-07-11 08:03:25 +08:00 1
挺好,建议 controller 改为 handle 。
|
2
ychost 2022-07-11 08:03:43 +08:00 1
GO 就不要搞 Java 的结构了,太啰嗦
|
5
charmToby 2022-07-11 09:09:41 +08:00 2
model 和 dao 层我感觉可以放一起
|
6
fiypig 2022-07-11 09:10:14 +08:00 1
db 可以改成 config 因为不单单是 db, 其实 go 最方便就是自己造,随便弄,过于约束也很麻烦
|
7
panlatent 2022-07-11 09:12:30 +08:00 1
赞同 #2 的,目录结构多花心思搞 多设计下没毛病,但是类似 Java 之类的结构,拿到了 Go 是真的水土不服。
|
8
dacapoday 2022-07-11 09:27:59 +08:00 1
如果是小型 web 程序,这种结构太沉重了。java 是历史原因导致的,但 go 没有这种包袱。
|
9
dacapoday 2022-07-11 09:30:49 +08:00
@dacapoday go 的关键词比较少,表达能力不如 java ,采用 java 的这种结构会多很多代码。让 go 的开发效率像 java 一样低效,费人力。
|
10
sadfQED2 2022-07-11 09:31:28 +08:00 via Android 1
dao 和 model 可以合成一个,两个比较冗余,但问题也不大
controller 和 service 中间还应该加一层,因为 service 之间不能互调,互调的业务逻辑放到 controller 中也不合适 |
11
zhangzEric 2022-07-11 09:35:11 +08:00 1
OP 博客里很多没完成的文章啊,本来抱着探索的希望进去,好几篇都是写一半空一半,建议 OP 后续有空填一下坑😂
|
12
coolair 2022-07-11 10:02:47 +08:00 1
这种结构真没必要用 Go 了,直接用 Java 不香吗?
|
13
qW7bo2FbzbC0 2022-07-11 10:06:58 +08:00
- adapter
- model - controller - service/repository - helper |
14
sciel 2022-07-11 10:12:37 +08:00 via iPhone 1
/
├── api ├── internal │ ├── cmd 入口指令 │ ├── consts │ ├── controller │ ├── dao │ ├── model │ └── service ├── manifest 配置文件 ├── resource ├── utility 通用工具 ├── go.mod └── main.go 我觉得这个就挺好,来自 goframe |
15
LoNeFong 2022-07-11 10:32:49 +08:00
|
16
keepeye 2022-07-11 11:15:45 +08:00 1
goframe 的分层设计可以参考一下
|
17
freakxx 2022-07-11 12:11:08 +08:00
@sadfQED2 #10
这个其实是我一大难受的地方,不知有没比较好的处理方式。 比如 A service 需要 调用 B service 的某一个 func B service 反过来可能需要用到 B service 的 func 抛上一层后,还是解决不了循环引用的问题,总感觉不够直觉性。 然后这里就会开始变得有点脏,要么是冗余,要么就是需要做一些繁琐的处理。 |
18
sadfQED2 2022-07-11 12:16:52 +08:00 via Android
|
19
blless 2022-07-11 14:52:23 +08:00
要我说不如 DDD 。写到很多复杂业务的时候,无脑 controller 其实发现很多代码不知道放哪里,最后又都放到 controller 里,分了其实最后也没怎么分。DDD 从开始会让你拆分业务领域,持久层跟表现层其实都不是业务的重点。
|
21
gowk 2022-07-11 17:23:45 +08:00
@blless #19
我敢说国内 90%的团队是玩不转 DDD 的,因为好多连基本的面向对象都写不好,更别提 DDD 了。 理想跟现实还是有很大差距的,就像 RESTFul API 其实是需要很好的设计去支撑的,不然到就是给自己找麻烦。 最后发现还不如 GET/POST 一把梭 |
22
dcsuibian 2022-07-11 18:03:01 +08:00 1
这种结构不属于 Java 的“包袱”而是财富,Java 根本没有规定要这么处理。
搞成这样的本质原因是大部分人根本不知道怎么设计一个项目的代码结构,目前的结构是优胜劣汰下来的、有成功经历、受到广泛认可的,统一的设计也促进了 Java 生态圈的发展。 但这种结构确实不适合直接拿到别的语言里,只能拿来参考。之前接触 nodejs 、python 后端的时候,按 Java 的方式写会怪怪的,不按它的写又不知道怎么组织,很头疼。 |
23
humpy 2022-07-11 18:03:14 +08:00
@blless #19 赞同,现在这种把 controller 放一块、model 放一块的组织形式,就像是公司里把所有后端放一个组、前端放一个组、产品放一个组一样,很不内聚。
|
25
Cola98 OP |
26
Cola98 OP 感谢各位大佬给出的建议和回答,小弟下个版本在修改修改!!
|
27
Cola98 OP @zhangzEric 后期会给补全的,有哪些感兴趣的,我优先补全,谢谢啦
|