如果你的组员,用 controller 直接调用 mapper ,是不是可以直接 fire 了
![]() |
101
listen2wind 7 天前
|
102
runlongyao2 7 天前
@FreeEx 我代表 JAVA 之父中国分父开除你
|
![]() |
103
totoro52 7 天前
我的红线就是 control 里调 mapper 和 方法接受返回都用 map ,特别是 mapper 返回一个大 map 那种
|
104
fruitmonster 7 天前 ![]() 一个代码怎么写就要 fire 人,这要写个 Bug 不得判刑?
|
![]() |
105
happypy1 7 天前
这个取决于你的业务逻辑,如果简单,可以直接在里面写,不需要太教条主义。
我更加看重的是单元测试的场景覆盖率。这可以保证至少以后重构这个 API 不会产生 bug |
![]() |
106
AppxLite 7 天前
你以爲你是誰?項目拍板(規則制定)者嗎?如果是,當我沒說,否則我愛怎麼寫怎麼寫,又不是不能用
|
![]() |
107
lancelock 7 天前 ![]() 每次写一个接口,就一个简单查询,git 一提交动了五六个文件,都是同名方法一层一层往下调,真的感觉脑血栓。除了工作没办法,我自己项目从来不用 java 写,真是够够的。
|
![]() |
108
opengps 7 天前
技术圈里确实有着各种规范,但应用到实际场景确实反而是多此一举,过度抽象。
所以实际评估应该怎么做的时候,更应该结合上这个项目的实际生命周期: 1 ,不能给年会抽奖活动的简单画面做个分布式吧? 2 ,不应该给全年使用的 oa 直接操作数据库吧? |
109
wysnxzm 7 天前
很明显,在 2025 年还是有很多人做着单机项目没有接触过分布式项目也没有团队开发的概念的
|
110
ccover 7 天前
@jeffh 个人感觉 controller 还是需要经过 service ,再走 mapper ,否则代码根本没法复用,至于 service 有无 impl 则看项目大小(是否需要多态,以及公司有无代码规范)。
ps. 个人项目拿钱的,怎么快怎么来 ![]() |
111
jguo 7 天前 ![]() 知道什么是破窗理论吗?这也没问题,那也没问题,最后就成屎山了。
|
![]() |
112
yuwangG 7 天前
就问你能不能跑?
|
![]() |
113
SuspectX 7 天前 via Android
又不是不能用.jpg 🤣
|
114
minottomie4383 7 天前 ![]() 我就想问国内几个头牌大厂规模够大团队够大规矩够多技术够广够深有没有屎山代码
我就想问有没有限定场景,你不能某个场景需要的规范强加到所有场景吧 |
116
liuguang 7 天前
java 的垃圾教条,写个 hello world 是不是还得过一下 service ?
|
117
Jame00001 7 天前 via Android
你立过规矩吗?有没有明文规定,没有违反规定你 fire 个皮啊,真当自己是皇帝?觉得能力不行是面试官的问题,试用期怎么过得是你的问题
|
![]() |
118
WhatIf 7 天前
恕我直言, 再坐的全是***
都认为写的是面向对象吧? 那么 属性呢?行为呢? 按照现行习惯, 路上跑的狗, 只有参数肉体, 以及一个狗服务。 |
![]() |
119
IamUNICODE 7 天前
我刚刚跑的那个公司,全都在 controller 里,整个代码就一层,没有任何一个人有异议,让我很怀疑自我,真的。。
|
![]() |
120
lesismal 7 天前
java 团队都开掉才是正解
|
121
minottomie4383 7 天前
@IamUNICODE 这和教条是两个极端,一整个项目怎么可能没有复用的代码和解藕的地方。不是分层不行,我觉得还得看情况。写 java 和 spring 的都是什么天才,复用搞出去做一份不是本能吗,有相同的行为做接口不是写代码本能吗。不会是套了半天 service ,impl ,mapper ,get set 不知道是为什么吧,只是规矩让他们这么干所以这么干,不会吧不会吧
|
122
RicardoY 7 天前
我觉得问题不大,关键看你们使用的是什么模式。如果是简单需求使用事务脚本模式的话,在 controller 里直接调用 dao 没有什么问题的。
|
123
jjx 7 天前 via Android
这个,代码只要逻辑清晰,结构优美,读起来没问题就好,别搞这些花花肠子,有什么意义。难不成吃饭前忘了洗手就犯了天条
|
124
wfd0807 7 天前
多年以前研究过这个问题,看到过一篇文章(时间太久找不到出处了),其中有一段 spring 官方人员对 controller 、service 、dao 分层的说明,这种分层模式是官方演示 spring 框架搭建项目时的示范,而不是一个要遵守的范式。其中 service 层作用只是“事物脚本”罢了。
———— 以上内容来自于曾经阅读过的文章的记忆,以下内容是个人主观评价———— 如果强行分层,也不是不行。简单的查询业务,去除 service 层,也无伤大雅。 因为这点小事要 fire 人家,duck 不必!大家出来工作都是为了混口饭吃,劝你做个好人! |
125
RicardoY 7 天前
模式(或者架构)需要匹配业务本身的复杂度,如果简单的业务用例也要使用接口层-应用层-领域层-基础设施层(可能还有装配层和事务层)的架构,开发效率会很差。
|
![]() |
126
fenglangjuxu 7 天前
@FreeEx 我之前就疑问为啥 interface 只有一个实现的时候 要外面放一个 iterface
|
127
hello158 7 天前 ![]() 我之前在组内推广某个分层设计,我觉得很好的。都遭到拒绝了,很多人愿意一把梭。不愿意搞那么“绕”。
在他们眼里,什么鸡吧分层,什么鸡吧抽象,不如我一把梭来的快。 不过话说回来: 你平时怎么写?你是怎么分层设计的? 别光碰,你讲一下,让我看看你的水平。 |
![]() |
128
littlez0325 7 天前
@FreeEx 最后一句倒反天罡
![]() |
129
iOCZS 7 天前
Java 团队需要大清洗一下,
|
![]() |
130
siweipancc 7 天前 via iPhone
基于以上的回复,我觉得我们都有个共识:php 天下第一 doge
|
![]() |
131
NoString 7 天前 ![]() 1. 组内有明确的开发规范文档吗?或者说有在组会强调过开发规范吗?
2. 组内 Git 有代码质量检查的流水线任务吗?有代码 Review 机制吗? 3. 合并 master 权限在你手里还是在他自己手里? 123 都做了 打回去让重写,你自己受不了他听不进去就开了。但是上面都没有,那就是你自己有病🙄 |
133
hxysnail 7 天前
其实吧,林子大什么鸟都有,江湖大什么人都有,有时也只能看开点……
拿我项目组一堆沙雕外包来说,就组装 URL 这个很简单的事,老是自己做字符串格式化,结果要么有时多了斜杆,要么有时特殊字符没有转义,总之小毛病不断。你跟他说了无数次用标准库里面的 URL 对象来拼接,过段时间他又自己做字符串格式化。有些人他就是不开窍,这放在高中时代,不就是同一道题一次次重复做错的沙雕吗……你一怼他,他还生气了,能怎么办,就随他去好了,慢慢把他边缘化就是了。 |
![]() |
134
qxmqh 7 天前
真的恐怖,你们比八股文还八股文。
|
135
gefangshuai 7 天前
@Narcissu5 #23 你不写 service ,怎么控制的事务?
|
![]() |
136
Tupig 7 天前
没毛病啊,减少服务层赚差价
|
![]() |
137
Patrick6 7 天前
Java 的教条主义是这样的
|
138
kingocns 7 天前 ![]() 任何事情都有成本,既然你的组员能被招入公司,首先是对他的能力和成本公司是认可的,管理层最大的作用是帮助团队提效,而你不仅不想解决办法,帮助组员,只想 fire ,你才是最大的问题,我觉得公司让你担任组长的这层级,没有对你进行过系统培训,而你也没有自主的去学习如何当一个好的管理者。说白了就是草台班子,带领团队,不仅仅是技术向!
|
![]() |
139
murmur 7 天前
难道不是 controller 直接执行 sql 么
|
140
gefangshuai 7 天前
看到高赞回复我笑了。看来大家都需要读一下《重构: 改善既有代码的设计》这本书。有时候你嘴里所谓的不遵守“教条”,不过是给后人挖坑罢了
|
141
htxy1985 7 天前
看大家把他喷的这么不轻,我甚至已经忘了当初为什么要分这么多层,有没有人理性的讨论下,到底能不能这么做?两种方式的各自优劣,存粹从技术角度讨论,别带情绪。
|
![]() |
142
javak 7 天前
你有这个权利的话, 那当然是根据你的喜好来咯。
|
![]() |
143
Dolov 7 天前
只要程序能跑就说明没有大的问题
|
![]() |
144
lanceadd 7 天前
emmm 你们还是手搓的 controller 吗,直接写个代码生成器,设计完接口生成一下,controller ,service ,serviceMockImpl 啥的都生成好,然后同事只需要实现那个 service ,xxxServiceImpl 里他想怎么弄都行,最后加个注解 @Primary 把原来 MockImpl 挤下去完事了,避免没必要的手搓就没这些问题
|
145
amanisheir 7 天前
@buffzty 遇见过公司封的 Web 框架 jsp 专用函数 string runMethod(name),东西放数据库,这个 method 可能真是个 class 的方法,也可能是 sql ,然后 sql 用|拼接多个字段成一个,然后 jsp 再|分出数组用,看着数组下标你都头麻
|
![]() |
146
douyacai911 7 天前 ![]() Java 恐怖主义
|
![]() |
148
murmur 7 天前
@gefangshuai 现在的 ORM 封装没有手动模式了么,必须通过注解开事务?
|
![]() |
149
looveh 7 天前
蒜鸟蒜鸟,都不泳易
|
150
SZhan 7 天前
@xiangyuecn 请问这样写是不符合代码规范嘛?还是说有什么其他的原因。我干过这个事情,入参也用过 Map<String, Object> 因为有时候单纯懒,不想建新的类,以对象的形式返回,,入参建一个 reqVO, 返回建一个 DTO ,有的项目写着烦了就没想整这些
![]() |
151
SD10 7 天前
请问你是在 code review 的时候发现的吗,是的话让他按照你的建议改了就好了。
如果已经上到生产环境了,那么你应该反思开发、上线流程,开发规范,没有明文规范且没有 review ,那这是你的问题啊。即使这个人非常差,那么也是你当年看走眼了,该反思的不是你自己吗? |
![]() |
152
Marszm 7 天前
没 controller ,只有 serverice ,直接调 mapper 。又不是不能用,少写点代码摸鱼不好么
|
![]() |
153
Marszm 7 天前
我再说个点,后端都 tm 是数据库和接口的中间商,有 view 鸡毛事
|
154
yurichange 7 天前
不要命名成 mapper
|
155
NikoXu 7 天前
把 Entity 的属性直接定义 Controller 里面 , 全程只用一个 class , 又不是不能用,少写点代码摸鱼不好么
|
![]() |
156
wuxinling 7 天前
如果根据入参直接一个查询返回结果,我觉得是可以的,没有或者只有基础判断那种。(只能查询)
不过我也不会那么写,现在偷懒一点点,反正回头要补回来的。 |
![]() |
157
casillasyi 7 天前
为啥不行?包的一层又一层就是规矩?扩展性就靠你说的规矩?
|
![]() |
158
dcdlove 7 天前 ![]() |
![]() |
159
BeFun 7 天前
我 18 年接了个外包,业务逻辑简单,CRUD 简单的我都是直接 controller 直接调用 mapper ,到今年他们系统还用着,没问题啊,除了每年给他们续费一下服务器费用
|
![]() |
160
dajj 7 天前
如果你的领导只会 JAVA ,那么你可以跑路了
|
![]() |
161
asmoker 7 天前
@Jimmy2Angel 哈哈哈哈哈,那我不得不祭出同事的代码了。。。
为了根据状态进行排序的需求实现方便,本来定义的状态值 status 为整型,1 、2 、3 、4 人添加了个 1.5 的值。。。。。。 md ,用 python ,也没报错的啥问题。。。 |
![]() |
162
hafuhafu 7 天前
约束不了你的组员是你的问题,你要定开发规范啊,不然大家技术参差不齐可不就随便写了。
不过为了抨击 Java 替这种组员说话的也是一言难尽 |
163
willli 7 天前
你把这个写到劳动合同或者员工手册里或者其他什么正式文件里,让组员知晓,我支持你开除
|
![]() |
164
supuwoerc 7 天前
蒜鸟蒜鸟,都不泳易,谁都是新手菜鸟来的,op 也不是上来写的都是最佳实践的代码吧,你的组员,你发现写的代码不符合你的要求,你告诉他不能这样做不就行了,让他改,fire 人家没啥必要。
|
![]() |
165
yukiir 7 天前
规范有没有正式文件,有没有培训及签字确认。
没有你 fire 撒?别弄到最后自己工作丢了。 |
![]() |
166
LowBi 7 天前
不是 哥们 你这样只会让大家对 Java 的偏见越深
|
![]() |
167
kepenj 7 天前
内心应该是:不听话的人,多敲一个字符都是错!
|
168
a33291 7 天前
@gefangshuai #135 好奇怪的问题🤣
|
169
a33291 7 天前 ![]() |
170
sunznx 7 天前
主要考虑:
1.上面的人有没有定好规范呢,有的话还这么多 |
172
Richared 7 天前
查询不写 service 随意,要有更新,事务咋处理,controller 里手搓么?下边这帮评论是真不会还是假不会。
|
![]() |
173
merryCodeing 7 天前
@superchijinpeng 能跑就行
|
![]() |
174
dosmlp 7 天前
八股文背的真好
|
175
Blanke 7 天前
为什么非要搞 java 那点味
|
176
ttsuper 7 天前
建议再观察一下,如果出 bug 直接枪毙。
|
![]() |
177
leegradyllljjjj 7 天前 via iPhone
屎山不是说你代码写得好写的规范就行了,这是项目管理问题
|
![]() |
178
blackccc 7 天前
能不能帮帮他,如果你是他上级,不然你也太无情了
|
179
andyshz 7 天前
懒得说🙄
|
![]() |
180
0xLittleFi 7 天前
其实问题不大,就看你们项目内的代码是什么味道,如果毫无规矩,每个人都写自己的,没问题。 也不需要上纲上线,只要组内成员能接受就行,大家 CR 一下
|
![]() |
181
zw2019 7 天前
你这样我怕是找不到工作了
|
182
sky3hao9 7 天前
无语, 跟你说不下去, 典型的 java 思维
|
![]() |
183
SyncWorld 7 天前
哈哈 我今天才接手一个项目 Controller 调用 Controller 。。。。我已经淡然了,能用就行
|
184
rayyoun0 7 天前
三层架构系统就不要这么讲究了,叫你不把服务接口抽离出来
|
185
24Arise 7 天前
如果小作坊无所谓。但如果这人是我团队的,我会强调 1 ~ 2 次,第 3 次还这样我会直接剔出去,我的团队不允许存在不守开发规约的人,因为我做的是面向交付团队的产品,我希望给交付团队的是统一规约的产品便于他们理解及客制化 ~
|
186
xulolololololo 7 天前 ![]() 不清楚你见过把.log 提交到代码仓库的 7-8 年工作经验的混子没?
|
![]() |
187
zhoujx 7 天前
|
![]() |
188
c3de3f21 7 天前
私以为 `屎山` 主要原因来自:
- `产品`对`业务`的不了解或者`逐步了解` |
![]() |
189
monmon 7 天前 ![]() 回复中很多讨论到 “为什么 Service 在只有一个实现类的情况下也要定义一个接口?”,简单来说,这是一个 MVC 分层架构的最佳实践。
为什么是最佳实践,明明实践起来罗里吧嗦的,质疑是非常好的事情,从网上搜索很容易找到这个问题的答案,即这个最佳实践解决了什么问题: 1.解耦设计预留扩展点 2.单元测试:如果 Service 是具体类且直接调用 Mapper/数据库,测试时需启动数据库或 Mock 数据库连接(集成测试),速度分钟级。Service 接口化可 Mock 接口实现,完全隔离数据库,速度毫秒级。 3.依赖注入的规范化 ...... 每一个问题深入挖掘下去都会引出更多的问题,就会发现架构设计很大一部分解决的是未出现的问题。按照最佳实践开发的收益是显而易见的,多写一个 Service 接口,测试效率提升 100 倍不止,降低扩展成本,架构腐化的风险也会下降。 个人觉得软件开发中工程思维是很重要的,这也大概就是码农和软件工程师的区别吧...... |
190
imant 6 天前
哈哈,我这么教条的人,最近也直接调 Mapper 。真特么不想写 service ,简单的一个查询还得通过 service 包装,真累。。
|
191
danaesoziommw49 6 天前
|
![]() |
192
mb4555 6 天前
这得看项目复杂程度
|
193
orlando 6 天前
你们 java 这么恐怖吗
|
194
prosgtsr 6 天前
你是技术 leader 你可以做规范啊,没问题的
但是动不动就 fire 有点太离谱了吧 |
195
Revenant 6 天前
远古时期的项目直接写一个 SQLHelper ,里面包含 conn ,queryFetch ,getOne, exeute ,close 等函数,可以用到项目倒闭😂
|
![]() |
196
nutting 6 天前
还有 sql 写在前端的才牛
|
![]() |
197
duzhuo 6 天前
@danaesoziommw49 楼主只是代码规范,你们这都有安全问题了哈哈
|
![]() |
198
totoro52 6 天前
@gefangshuai #135 被 spring 毒害了
|
199
veightz 6 天前
看具体情况吧, 简单的应勇直接怼简单的表,可能也还好。
还是你的应用的复杂度,在分层和便捷中找平衡点。 想起之前的组件,在 controller 里直接做了非常多的,对于订单表的零散读操作和写操作。 造成后续,梳理需要哪些字段做索引, 哪些字段在什么时候会被更新变得非常困难。。 包括他还在 mapper 层里, 读 ThreadLocal 里的 UserID , 没有 Controller 层里取出来,作为参数透传。。 加上他设计了许多混乱的线程池, 造成串 UserID .. 头疼.. 再加上他对使用 @Transactional 充满极大的执念,把很多地方的 TransactionalTemplate 代码改成注解,导致许多地方没有生效,错误信息丢失。 buffer 叠成这样的。。可以考虑 fire 了。。 |
200
facebook47 6 天前 via Android
@sean250031 你说的很有道理,但是现在这些不都是自动生成的嘛🤣🤣🤣
|