业务逻辑是放在 Java 好还是放在 sql 好?

2019-03-22 16:19:06 +08:00
 zw1one
如题~
7537 次点击
所在节点    问与答
60 条回复
xipushi
2019-03-22 19:18:45 +08:00
怎么爽怎么来
jamesxu
2019-03-22 19:54:46 +08:00
之前有外包把很多逻辑扔 oracle 存储过程、触发器、定时任务里,到处乱放,乱七八糟,我反向查问题得从一个库跳到另个库,从一个表跳到另一个表,从各种存储过程和触发器中跳转,简直了
murmur
2019-03-22 20:01:25 +08:00
@jay0726 所谓的热部署 业务逻辑放 SQL 上直接换存储过程就可以了 我还真见过这么玩的
Kylinsun
2019-03-22 20:24:23 +08:00
sevice 层
Xbluer
2019-03-22 20:50:17 +08:00
@l00t 存储过程真不能算是一目了然。见过一些项目,3-4 千行起步,1 万行以上的比比皆是。有时候 IF 语句之后,隔了几百上千行之后才会见到对应的 else。。。
Xbluer
2019-03-22 20:54:12 +08:00
楼主可以了解下领域模型设计相关的东东。

代码不应该仅仅实现业务逻辑;代码本身更应该完整的表达出对应的业务逻辑,SQL 语句本身并不具备次功能。
billlee
2019-03-22 21:36:45 +08:00
首先,你用的是什么数据库?
silentstorm
2019-03-22 22:39:17 +08:00
复杂业务还是 java 写比较好,但是简单不影响性能的表关联还是 sql 实现吧
ebony0319
2019-03-22 22:54:32 +08:00
写在代码里面。把公共方法写成一个公共服务层。我见过太多项目复杂业务直接写在 sql 的。这样有不好的地方:
1 不方便调试,找出一个错误的地方太难了。
2 维护成本太高,除了你估计别人也很难看懂。
3.数据业务逻辑层不需要关心数据底层是什么数据库,你有可能目前是 mysql,Oracle,es,nosql。
之前学 sql 的时候说的是存储过程运行快,安全,减少网络流量带宽...这些我觉得都可以找到相应的解决方案,并且现在硬件有了这么大提升。
dudor
2019-03-22 22:56:12 +08:00
我公司的业务大部分都是存储过程里写
Imr
2019-03-22 22:59:57 +08:00
@zw1one 做运维的告诉你,数据库是架构里最薄弱的一块,规模大起来,数据库瓶颈来的最快,而且升级最贵,相反扩展最便宜最简单的是后端跑的小机器。把大小操作都扔给数据库不是长远之计
lijbgo
2019-03-22 23:10:30 +08:00
我的原则是
尽量都在 java 里写。
特殊情况,为了性能,把部分代码写到数据库
1.在 Java 里写会频繁调用数据库
2.数据库返回大量数据,还需要在 java 中过滤
l8g
2019-03-22 23:44:08 +08:00
业务写在代码里 SQL 尽量简单
bit
2019-03-23 00:03:20 +08:00
Oracle 官方低代码开发工具 Oracle Application Express (APEX) 请了解一下
https://apex.oracle.com

免费在线空间申请试用 (有中文版)
https://apex.oracle.com/pls/apex/f?p=4550

中国开发者微信群请搜索:APEX 中文社区微信群
zjj19950716
2019-03-23 00:59:49 +08:00
刚接手一个项目,业务全在存储里,java 只负责选择存储,调用,取结果返回
CallMeReznov
2019-03-23 01:20:08 +08:00
把逻辑写到数据库里?
那不就是存储过程吗
第一个炸的就是这块
anyele
2019-03-23 02:14:18 +08:00
@xbigfat 如何单元测试
herebury
2019-03-23 02:24:06 +08:00
现在一般都写 Java 里了吧

当年接手一个金融方面的 data warehouse,从数据库设计就让人震惊,业务全在存储里,各种 hard coded 数字,那叫一个看不懂,文档小字 400 多页,一队人啃完了依然不敢重构
不过后来接了些其他的金融方面的项目发现数据库设计都很神奇,而且蜜汁健壮,反倒开始觉得 relational db 就该那么用了,贼可怕
anyele
2019-03-23 02:32:35 +08:00
无责任说一句,可能吼着互联网寒冬的,估计就是钟爱存储过程的那群人
jingniao
2019-03-23 05:59:26 +08:00
前公司,金融类公司。
业务核心全都存储过程,代码就是一个接入层。

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

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

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

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

© 2021 V2EX