service 层是否应该有通用的 crud 方法?

2016-07-08 17:13:03 +08:00
 jatesun

今天跟 leader 产生了一点分歧, leader 认为 service 只应该包含业务逻辑方法而不应该有简单的增删改查方法,而我认为有时候 controller (或者 action )只需要查看操作或者简单的删除操作, leader 认为如果有这种操作单独写 service 方法。大家有什么意见?

3509 次点击
所在节点    程序员
17 条回复
mercurylanded
2016-07-08 17:20:00 +08:00
一个是基于业务模型一个是基于数据模型.

从软件建模的角度来说你的 leader 是对的.

你把 crud 暴露出来了,是不是也把底层的 db 模型一起暴露出来了.
zhenjiachen
2016-07-08 17:21:45 +08:00
我自己写的项目都想放弃掉 service 了。
jatesun
2016-07-08 17:23:56 +08:00
@mercurylanded 但是每次遇到简单的难道都要写一遍→_→
jatesun
2016-07-08 17:24:34 +08:00
@zhenjiachen 有时候业务复杂还是很有必要的
zhenjiachen
2016-07-08 17:26:27 +08:00
@jatesun 对复杂的业务有必要,但是普通的 CRUD 完全没必要。我用 spring rest data ,直接把 repository 映射为 rest 接口。
mercurylanded
2016-07-08 17:26:34 +08:00
@jatesun 你不能保证简单的接口永远不会变化.需要单独写就说明这是另外一个业务了.当你把本来是多个业务去执行的东西塞到一个 crud 操作里去做之后.该需求的时候祝你好运.
jatesun
2016-07-08 17:28:56 +08:00
@mercurylanded 关键是通用方法不是特别容易变,只有业务借口才会容易变。
jatesun
2016-07-08 17:30:29 +08:00
@zhenjiachen 确实这样,简单的有个通用的的确很好
zhenjiachen
2016-07-08 17:36:34 +08:00
@jatesun 你们每个 service 都有接口么?我 service 从来不写接口。当然复杂的业务为了扩展有的地方是由调用者实现我定义的接口。
slixurd
2016-07-08 17:51:35 +08:00
不能跨层调用啊,再简单也不行
mercurylanded
2016-07-08 17:59:42 +08:00
@jatesun 你这个通用方法的定义本来都不对,把数据模型跟业务模型混起来了.

curd 是针对于数据模型去说的.没有包含业务,所以你看起来才是"通用"的.但是结合你的实际需求呢.

还有一个问题是直接暴露 crud 会把你的底层数据模型也曝露出来.如果有另外的系统要使用你这个接口耦合度就上去了.一个修改就可能影响多个系统.

当然如果你觉得不会有这些问题.写出通用的 crud 能大幅加快进度也没啥.写代码都是结合实际嘛..
huyi
2016-07-08 18:03:45 +08:00
所以他是你 leader
ljbha007
2016-07-08 18:09:16 +08:00
可以有增删查改的方法 但不需要通用的
eecjimmy
2016-07-08 18:41:38 +08:00
要分就彻底,否则就成那是看心情了,其他同事,或者后来的人,或者隔了两年,谁也不知道这段代码哪天写的,更不知道写代码人的心情如何?
domty
2016-07-08 20:16:17 +08:00
通用的 crud 不是应该放在 dao 里面的吗?
我很好奇你把通用的 crud 扔到 service 里,你 controller 和 dao 是怎么用的。
Mac
2016-07-08 20:34:17 +08:00
CRU 没什么问题,关键是 D ,是真的 D 还是 U 的变种。真的 D 不建议在 service 层面,这个隐患太大。
SmiteChow
2016-07-09 16:21:41 +08:00
你的领导是对的, CRUD 一般是放在 model 层次上做的。

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

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

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

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

© 2021 V2EX