![]() | 1 xkeyideal 2020-09-04 16:23:07 +08:00 ![]() 请把 Java 那套坏习惯改掉吧,go 不适合这套 |
2 14v45mJPBYJW8dT7 2020-09-04 16:25:15 +08:00 |
![]() | 4 vipppppp 2020-09-04 16:28:42 +08:00 ![]() |
![]() | 5 bintianbaihua 2020-09-04 16:33:19 +08:00 ![]() |
![]() | 6 gowk 2020-09-04 16:35:50 +08:00 正在探索中,关注一下这个问题 |
7 mzmxcvbn OP @vipppppp 谢谢回复,我没写过 JAVA,我之前用 python/flask 写小项目的时候是最简单的只分了 model 和 controller,但我感觉对于大型项目,这样可能不太好,所以现在转到 go 希望能找到更好的项目结构方案。 |
![]() | 8 xkeyideal 2020-09-04 16:46:07 +08:00 @mzmxcvbn go 比较随意,写 web 项目我一般开 config, engine, httphandle, service, storage 几个目录,也不绝对,根据项目来,网上有一些建议的目录组织方式,找一个适合自己的就行,项目写多了,就能找到一个比较合适自己的了 |
![]() | 9 6IbA2bj5ip3tK49j 2020-09-04 17:39:07 +08:00 1,是 Service,而不是 Server 2,三层架构不是 Java 独有的,而且谈不上臃肿。 |
![]() | 10 windyboy 2020-09-04 17:48:25 +08:00 层太多,忘记了读数据库其实只需要写好 sql |
11 dongisking 2020-09-04 17:49:09 +08:00 看到 dao 就知道下面有啥评论 |
![]() | 12 basefas 2020-09-04 17:52:29 +08:00 |
13 dongisking 2020-09-04 17:54:05 +08:00 |
14 linxl 2020-09-04 17:59:18 +08:00 我几乎也是这么分目录的, 主要是没觉得有啥问题... |
![]() | 15 lix7 2020-09-04 18:06:34 +08:00 dao 还是要有的,未来如果需要在 data load 这个切面做事情的话,没有单独分层而是“server 层的代码中直接调用 orm 增删改查的方法。”会导致改起来很麻烦。当业务大到一定程度就没法改了。 其实如果还处于对性能要求不高的阶段,dao 层可以很简单,只有 list 、load 、save 三个方法。 至于 controller 和 service,我觉着确实一定程度上可以合并。现阶段大部分写事务脚本的业务,service 复用的机会不多。能复用的话也都会抽成单独的子函数。 建议楼主实践下 ddd,代码写出来会很清晰。 |
16 pigzzz 2020-09-04 18:07:23 +08:00 建议楼主把 dao 换成 repository 关键字,就不会被那些反 java 的人喷了 |
![]() | 17 Yoock 2020-09-04 18:09:29 +08:00 via iPhone 有 dao 没毛病 |
![]() | 18 vipppppp 2020-09-04 18:52:20 +08:00 建议楼主不要按 java 的写法就被打成反 java 和喷楼主,我是服了 我想没几个开源大项目的 go 或者 python 按照这样写的 只是觉得语言的特性不同,有时套着写会显得很累赘 |
![]() | 19 frozenshadow 2020-09-04 21:12:31 +08:00 via Android @mzmxcvbn 5L @bintianbaihua 推荐的这个结构很棒,这个老哥的几篇相关博客也值得一读 |
![]() | 20 Yuiham 2020-09-04 21:25:57 +08:00 via Android 单体应用的项目上整洁架构 |
21 EminemW 2020-09-05 19:21:28 +08:00 如果分 controller 跟 service 的话,controller 层做参数校验 |
22 mzmxcvbn OP @lix7 谢谢回复!我还想请教一下有关 dao 层的问题:1.如果后续项目除了 mysql 还要用到 mongodb 或者 redis 的话,是不是相关操作也都放在 dao 层。2.dao 层里具体实现是对每一个 model 都要写自己的 list 、load 、save 函数吗,而且对与 list,我可能会有好多地方用到,但参数条件可能都不同,比如有些要多个 where,有些要 order by,有些要 limit,这是不是每用到一个不一样的,虽然都是 list,但都要再加一个函数? |
![]() | 23 lix7 2020-09-07 18:59:26 +08:00 ![]() @mzmxcvbn 1. 都放在一层 dao 里,叫什么不重要,重要的这层只负责数据的加载和保存,你只需要调用标准接口,不需要关心存储细节; 2. 从 DDD 的角度来讲,每一个聚合根对应一个 DAO ( DDD 里叫 repository )。但如果只从分层角度来考虑的话,是的,每一个 model 对应一个 dao ; 3. 对于 list 接口,你自己已经提到了,where/order by/limit 都只是“参数条件”,所以他们只是一个大接口的参数而已,这个接口的基础功能,就只是 list,至于怎么 list 、list 多少个东西出来、顺序是啥样的,只是参数而已 |
![]() | 24 rita413413 2020-12-11 07:42:17 +08:00 via iPhone @basefas 多谢 |
![]() | 25 joseph1994 2021-04-21 10:00:41 +08:00 ![]() 上面有些人是不是有点偏激啊,不清楚这样分层有啥大毛病,MVC 从来就不是 Java 的专利和代名词...为啥称之为“Java 的坏毛病”?再说论工程化的话,Java 有很多东西是 Go 要学的,我虽然喜欢 Go,但是真不想和这群人为伍 |
![]() | 26 waibunleung 2021-05-27 19:32:47 +08:00 @mzmxcvbn 我有了同样的疑问,看这个帖子还是没有很好地得到解决呀...题主方便交流一下吗? |
![]() | &nbp; 27 pennai 2022-03-07 20:15:34 +08:00 上面太偏激了吧,软件工程的东西,怎么扯上 java 就叫“坏毛病”了呢? |