把业务逻辑写在存储过程中有哪些缺点和优点?
2023-09-11 14:14:18 时间
https://segmentfault.com/q/1010000000251484
我的观点:这么设计的目的并不能方便随时修改业务逻辑,只是方便熟悉存储过程的开发人员,能够随时修改业务逻辑。对于后续的业务逻辑越趋于复杂,修改就越困难,存储过程中的重复代码就越多;重复代码越多,系统的坏味道就越散发开来。
由于.net在一些系统UI展示控件上,跟数据库集成,非常方便用户开发,简单的拖拖拉拉,再链接数据库,就能搞出一些像样的东西出来。这对系统逻辑不是很复杂的情况下,开发简单高效,且由于逻辑不是很复杂,也容易维护,所以很有优势。
但是系统的逻辑一旦达到一定的复杂度,把业务逻辑都放在存储过程中就会有2个很大的弊端,一是把系统的压力全都压到数据库上,这样势必增加系统的风险,且针对将来的负载增加的时候,不容易做水平扩展;二是业务逻辑放到存储过程,维护比较困难,且对于一些业务扩展,势必会增加冗余的代码,这样也会增加系统出bug的风险。
所以,在考量一个设计方案的时候,要综合系统的复杂度、技术实现平台等各方面。例如,对于技术实现平台,.net提供了这种集成数据库的UI控件,能够有效实现数据驱动,开发简单高效,但java就无法提供这种优势(ps:一般把这种叫做【表模块】设计方式);对于系统复杂度很高,为了应付后续的需求,一般会考虑【领域模型】设计方式,通过对业务进行领域建模,利用面向对象的各种设计模式,能够有效满足业务需求,且将系统压力分流到应用端,通过应用端的水平扩展,更方便系统扩容。
由于不了解你们系统的业务复杂程度,所以也不能说现有的基于存储过程的设计方式有什么问题,这需要你根据你们系统的需求等各方面综合来评估。最后推荐一本书:企业应用架构模式
相关文章
- Java运算符 逻辑运算符 短路运算符
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
- wpf x:Class 前后台逻辑关联的关键!
- 逻辑回归及常用模型分类评估方法
- HDFS追本溯源:HDFS操作的逻辑流程与源码解析
- 编写Reduce处理逻辑
- 数据库的逻辑结构(简)
- 《数据库技术原理与应用教程(第2版)》——3.5 信息世界与逻辑模型
- openGauss数据库的逻辑备份与恢复
- openGauss逻辑结构:表管理2
- 数据结构 | 顺序表、链表和数组是逻辑结构还是物理(存储)结构?
- 支付中的业务逻辑|支付幂等性
- Tensorflow 入门与实践(基础知识)-逻辑回归+多层感知机
- Ch1. 逻辑结构、存储结构、时间复杂度、空间复杂度
- 在handlebars.js {{#if}}条件下的逻辑运算符解决方案
- 【数电】(二) 基本逻辑运算与逻辑门电路
- 高性能 MySQL(一):逻辑架构