`
ddbird
  • 浏览: 32005 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

业务逻辑封装到存储过程中的优缺点。

阅读更多
 是否有愿意来讨论一下这个问题。虽然这在引入了ORM之后的java开发中很少见,不过我觉得也可以拿来讨论一下。
分享到:
评论
21 楼 ddbird 2007-03-23  
我希望大家看这个问题的时候不要带主观偏见,请尽量客观,我从头到尾都没有说过这样做是好还是坏。 我只是想通过集思广益,来探讨这种做法的有缺点,然后以后可以根据探讨的结果去思考什么情况下可以使用这种方法。 哪儿来的绝对的好和坏? 同时也不明白,是不是javaeye的高手很多,对这种问题不屑一顾了,38个新手评,可以的,不知道以后还敢不敢发贴来讨论了,真是faint
20 楼 liangguanhui 2007-03-22  
在现在这种ORM满天飞的年代,非要用存储过程写Service,原因不外乎:

(1)客户要求。这个应该是最主要的原因,据我所知,银行、证券等对安全性要求极高的应用都会把逻辑写到数据库里。

(2)对性能要求比较苛刻。
19 楼 ddbird 2007-03-22  
优点:
性能一般会有提高。(对于大数据量的复杂的逻辑,减少网络传输。充分利用了数据库本身的优化性能。 )
逻辑的修改可以即时发布,不需要编译和发布代码。

缺点:
不能应用面向对象的思路和设计。
调试困难。
可移值性差。
------------------------

Welcome every body, say what you want to say, please!
18 楼 hyhongyong 2007-03-22  
ddbird 写道


稍微整理一下:
优点:
性能一般会有提高。
逻辑的修改可以即时发布,不需要编译和发布代码。

缺点:
不能应用面向对象的思路和设计。


------分割线------
引用
如果 数据库要变更的话,那不是就完了.

对于数据库变更,这其实不能算是个问题的问题,因为不是做产品销售出去的话,如果是自己公司的ERP系统等,数据库定下来之后极少改变的。
------分割线------
引用
非可重用
(听说过哪个存储过程被继承了?每次都 要全拷过来)

对于重用,有一种叫代码级重用,这个无论在哪里都能做到的。 另外,既然叫存储过程,本身就是面向过程的,所以面向对象中的概念自然不能在这里应用。虽然没有继承,但是过程依然可以调用过程,这也是一种重用。
------分割线------


补充一下:
优点: 对于大数据量的复杂的逻辑,减少网络传输。
       充分利用了数据库本身的优化性能。
缺点:可移值性差。(虽然少有需要移值数据库的,不过现在我就要面对这个问题。要从sybase移到oracle,有近100个存储过程要我重写啊!)

17 楼 ddbird 2007-03-22  
优点:
性能一般会有提高。
逻辑的修改可以即时发布,不需要编译和发布代码。

缺点:
不能应用面向对象的思路和设计。
调试困难。
------------------------
还有么?大家请踊跃发言啊~
16 楼 Eden 2007-03-22  
优点速度快,之前做的一个项目,类似股市行情,每秒实时刷新大量数据,迫不得已,写了存储过程。
缺点就是难于调试。
对于一般的项目,数据库倒是很少变动的。而且发现对于性能要求高的系统,很多时候结构的优雅要让位于运行的效率
15 楼 feygo 2007-03-22  
基本上不用

楼下继续
14 楼 FedoraCoreIII 2007-03-22  
小弟做过两个项目涉及了一些存储过程,体会就是
优点就是执行速度较快
缺点就是写起来麻烦,不好调试
13 楼 ddbird 2007-03-22  
一叶孤鸿 写道
看做什么样的项目,据我所知ORACLE ERP基本所有的业务逻辑都在存储过程中实现

那你有亲手做过么?做过的话谈谈体会心得啊,谢谢。
12 楼 一叶孤鸿 2007-03-22  
看做什么样的项目,据我所知ORACLE ERP基本所有的业务逻辑都在存储过程中实现
11 楼 抛出异常的爱 2007-03-22  
面向过程的????存储过程
传临时表还是传游标
传回来时怎么办
10 楼 ddbird 2007-03-22  
好,非常感谢各位,我不是认同这种做法,只是想听听大家的思路。因为有句话说“存在即合理”, 所以我想看看他合理在哪儿,不合理在哪儿。

稍微整理一下:
优点:
性能一般会有提高。
逻辑的修改可以即时发布,不需要编译和发布代码。

缺点:
不能应用面向对象的思路和设计。


------分割线------
引用
如果 数据库要变更的话,那不是就完了.

对于数据库变更,这其实不能算是个问题的问题,因为不是做产品销售出去的话,如果是自己公司的ERP系统等,数据库定下来之后极少改变的。
------分割线------
引用
非可重用
(听说过哪个存储过程被继承了?每次都 要全拷过来)

对于重用,有一种叫代码级重用,这个无论在哪里都能做到的。 另外,既然叫存储过程,本身就是面向过程的,所以面向对象中的概念自然不能在这里应用。虽然没有继承,但是过程依然可以调用过程,这也是一种重用。
------分割线------
请大家继续参加讨论,谢谢!
9 楼 抛出异常的爱 2007-03-21  
除了数据库变动以外还有:
业务不能分布
一对一(一个系统一个数据库配置)
非可重用
(听说过哪个存储过程被继承了?每次都 要全拷过来)
8 楼 jfy3d 2007-03-21  
优点性能提高,
容易修改,即改即生效
7 楼 johnnyhg 2007-03-21  
johnnyhg 写道
6楼的说得太经典了。哈哈。
楼上的说得太经典了。
6 楼 johnnyhg 2007-03-21  
6楼的说得太经典了。哈哈。
5 楼 simohayha 2007-03-21  
如果 数据库要变更的话,那不是就完了.
4 楼 ahuaxuan 2007-03-21  
这也要看是什么业务逻辑,不是所有的业务逻辑都能放进去的,而且这样做破坏了分层机制,难于维护
3 楼 yuxie 2007-03-21  
如果你不需要OO的特性,只需要面向过程的语言,不需要跟代码在一块的版本管理,那你就用存储过程吧!
2 楼 ddbird 2007-03-21  
提出这个问题是因为碰到一个朋友,他说他现在主要职责是写存储过程,他们基本把业务逻辑都放在了存储过程里,好处是接口基本不变,不用编译程序就可以更改业务逻辑。而且有些操作的速度会更快一些,不知道大家如何看这个问题。

相关推荐

    Java-Oracle存储过程知识

    Java-Oracle存储过程是数据库中一种重要的数据库对象,主要用于封装业务逻辑,能够将一组实现特定功能的SQL语句集合起来,进行预编译和优化存储在数据库服务器中,并通过名称来调用执行。存储过程的特点包括提高执行...

    存储过程优缺点分析

    3. 面向对象编程的缺失:大量依赖存储过程的开发可能会导致业务逻辑难以实现面向对象的封装,不利于复用和构建通用框架。 4. 代码可读性和维护性:相比独立的代码文件,存储过程的代码可能更难阅读和理解,增加了...

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    MySQL从入门到实战学习教程之10存储过程.pptx

    1. 封装性:存储过程把业务规则封装在了存储过程体中,对外界隐藏了具体实现细节。对于调用者来说,只需简单调用,无需考虑逻辑功能的具体实现过程。 2. 执行速度快:存储过程是预编译的,一个存储过程在首次执行时...

    .NET中存储过程的使用

    - **封装业务逻辑**:尽可能将业务逻辑封装在存储过程中,以提高代码的复用性和维护性。 - **错误处理**:在存储过程中加入异常处理逻辑,确保异常情况下的数据一致性。 - **参数验证**:对输入参数进行有效性检查,...

    什么时候使用存储过程比较适合.docx

    2. **复杂业务逻辑**:如果一个事务的完成需要复杂的商业逻辑,如涉及多个数据操作和状态变更,存储过程可以封装这些逻辑,提高代码的可读性和维护性。 3. **统计和汇总**:对于需要进行大量计算和聚合操作的复杂...

    存储过程详细介绍..docx

    【存储过程详解】 存储过程是数据库管理系统中一个重要的特性,它是预编译的SQL语句集合,用于执行特定的任务。...然而,也需要根据具体应用场景和性能需求,权衡其优缺点,灵活选择是否将业务逻辑放入存储过程。

    mysql+数据库存储过程

    存储过程本质上是一种预先编写的SQL脚本,它可以在数据库服务器上执行,实现对数据的处理逻辑封装。存储过程类似于程序设计语言中的函数或过程,拥有自己的名称、参数列表以及返回值。 #### 二、存储过程分类 存储...

    12.MySQL存储过程1

    存储过程的主要优点在于它可以提高代码的复用性,封装复杂的业务逻辑,以及提供参数化的操作,同时还可以提高数据库操作的安全性和效率。 ### 1. 存储过程的创建 创建存储过程的基本语法如下: ```sql CREATE ...

    数据库存储过程和函数.pdf

    4. 易于维护:将逻辑封装在存储过程中,便于数据库管理及代码的维护和升级。 然而,使用存储过程和存储函数也存在一些缺点: 1. 内存消耗:每个数据库连接都可能会增加内存的使用,特别是使用大量存储过程时。 2. ...

    精通MySQL存储过程和函数

    1. **数据库压力增加:** 如果大量的业务逻辑封装在存储过程中,可能会增加数据库服务器的压力。 2. **调试困难:** 复杂的存储过程可能难以调试和维护。 3. **执行计划限制:** MySQL的查询优化器无法评估存储过程内部...

    mysql存储过程、触发器.pdf

    2. 可增强 SQL 语句的功能和灵活性:存储过程可以包含复杂的逻辑和计算,超过了单个 SQL 语句的能力。 3. 可减少网络流量:存储过程可以将多个 SQL 语句封装在一起,减少了网络流量和数据库服务器的负载。 4. 高性能...

    学生管理系统(三种方法控制台实现:ArrayList、SQL语句、存储过程)

    ArrayList适用于快速原型开发或轻量级应用,SQL语句是数据操作的基础,而存储过程则在需要高性能和复杂业务逻辑时发挥作用。在学生管理系统中,可以根据项目的规模和需求选择合适的方法,或者根据需求的演变逐步升级...

    Oracle与MySQL存储过程深度比较:特性、代码示例与应用场景

    存储过程是数据库中用于封装SQL语句和控制流逻辑的程序对象。Oracle和MySQL都是支持存储过程的主流数据库管理系统,但它们在存储过程的支持上存在一些差异。本文将深入探讨Oracle与MySQL在存储过程方面的差异,包括...

    本文对几种经典的软件体系结构风格进行了具体的阐述,分析了各种风格的特点、优缺点,最后重点介绍了三层C/S软件体系结构。

    本文将深入探讨几种经典的软件体系结构风格,以及它们的特点、优缺点。 1. **Mainframe结构** Mainframe结构是早期的集中式计算模型,所有的计算资源、数据和用户界面集中在一台大型主机上。由于其对远程数据库...

    strut spring hibernate 优缺点

    ### Struts, Spring, Hibernate 三大框架的优缺点分析 #### Struts框架 **优点:** 1. **组件模块化与灵活性:** Struts框架强调组件的模块化设计,这使得开发者可以根据项目的不同需求灵活地选择和组合这些组件。...

    java 存储过程使用方法介绍

    通过将频繁执行的操作或复杂的业务逻辑封装为存储过程,可以减少网络往返次数,避免冗余代码,并确保数据的一致性和完整性。此外,存储过程还可以作为安全层,限制对敏感数据的访问。 #### PL/SQL与Java存储过程...

    SQL2005存储过程解密

    SQL2005存储过程是微软SQL Server 2005数据库管理系统中的一种高级编程机制,它允许数据库管理员和开发者编写一系列复杂的SQL语句、控制流语句和系统功能,以实现数据处理、业务逻辑和数据操作的封装。在数据库应用...

    什么时候使用存储过程比较适合.pdf

    以下是对存储过程适用场景和优缺点的详细阐述: **适合使用存储过程的场景:** 1. **多SQL语句的事务**:当一个数据库操作涉及多个SQL语句或跨多个表时,存储过程可以整合这些操作,减少网络通信,提高效率。 2. ...

Global site tag (gtag.js) - Google Analytics