业务逻辑封装到存储过程中的优缺点。
?是否有愿意来讨论一下这个问题。虽然这在引入了ORM之后的java开发中很少见,不过我觉得也可以拿来讨论一下。 2 楼 ddbird 2007-03-21 提出这个问题是因为碰到一个朋友,他说他现在主要职责是写存储过程,他们基本把业务逻辑都放在了存储过程里,好处是接口基本不变,不用编译程序就可以更改业务逻辑。而且有些操作的速度会更快一些,不知道大家如何看这个问题。 3 楼 yuxie 2007-03-21 如果你不需要OO的特性,只需要面向过程的语言,不需要跟代码在一块的版本管理,那你就用存储过程吧! 4 楼 ahuaxuan 2007-03-21 这也要看是什么业务逻辑,不是所有的业务逻辑都能放进去的,而且这样做破坏了分层机制,难于维护 5 楼 simohayha 2007-03-21 如果 数据库要变更的话,那不是就完了. 6 楼 johnnyhg 2007-03-21 6楼的说得太经典了。哈哈。 7 楼 johnnyhg 2007-03-21 johnnyhg 写道6楼的说得太经典了。哈哈。楼上的说得太经典了。 8 楼 jfy3d 2007-03-21 优点性能提高,
容易修改,即改即生效 9 楼 抛出异常的爱 2007-03-21 除了数据库变动以外还有:
业务不能分布
一对一(一个系统一个数据库配置)
非可重用
(听说过哪个存储过程被继承了?每次都 要全拷过来) 10 楼 ddbird 2007-03-22 好,非常感谢各位,我不是认同这种做法,只是想听听大家的思路。因为有句话说“存在即合理”, 所以我想看看他合理在哪儿,不合理在哪儿。
稍微整理一下:
优点:
性能一般会有提高。
逻辑的修改可以即时发布,不需要编译和发布代码。
缺点:
不能应用面向对象的思路和设计。
------分割线------
引用如果 数据库要变更的话,那不是就完了.
对于数据库变更,这其实不能算是个问题的问题,因为不是做产品销售出去的话,如果是自己公司的ERP系统等,数据库定下来之后极少改变的。
------分割线------
引用非可重用
(听说过哪个存储过程被继承了?每次都 要全拷过来)
对于重用,有一种叫代码级重用,这个无论在哪里都能做到的。 另外,既然叫存储过程,本身就是面向过程的,所以面向对象中的概念自然不能在这里应用。虽然没有继承,但是过程依然可以调用过程,这也是一种重用。
------分割线------
请大家继续参加讨论,谢谢! 11 楼 抛出异常的爱 2007-03-22 面向过程的????存储过程
传临时表还是传游标
传回来时怎么办 12 楼 一叶孤鸿 2007-03-22 看做什么样的项目,据我所知ORACLE ERP基本所有的业务逻辑都在存储过程中实现 13 楼 ddbird 2007-03-22 一叶孤鸿 写道看做什么样的项目,据我所知ORACLE ERP基本所有的业务逻辑都在存储过程中实现
那你有亲手做过么?做过的话谈谈体会心得啊,谢谢。 14 楼 FedoraCoreIII 2007-03-22 小弟做过两个项目涉及了一些存储过程,体会就是
优点就是执行速度较快
缺点就是写起来麻烦,不好调试 15 楼 feygo 2007-03-22 基本上不用
楼下继续 16 楼 Eden 2007-03-22 优点速度快,之前做的一个项目,类似股市行情,每秒实时刷新大量数据,迫不得已,写了存储过程。
缺点就是难于调试。
对于一般的项目,数据库倒是很少变动的。而且发现对于性能要求高的系统,很多时候结构的优雅要让位于运行的效率 17 楼 ddbird 2007-03-22 优点:
性能一般会有提高。
逻辑的修改可以即时发布,不需要编译和发布代码。
缺点:
不能应用面向对象的思路和设计。
调试困难。
------------------------
还有么?大家请踊跃发言啊~
18 楼 hyhongyong 2007-03-22 ddbird 写道
稍微整理一下:
优点:
性能一般会有提高。
逻辑的修改可以即时发布,不需要编译和发布代码。
缺点:
不能应用面向对象的思路和设计。
------分割线------
引用如果 数据库要变更的话,那不是就完了.
对于数据库变更,这其实不能算是个问题的问题,因为不是做产品销售出去的话,如果是自己公司的ERP系统等,数据库定下来之后极少改变的。
------分割线------
引用非可重用
(听说过哪个存储过程被继承了?每次都 要全拷过来)
对于重用,有一种叫代码级重用,这个无论在哪里都能做到的。 另外,既然叫存储过程,本身就是面向过程的,所以面向对象中的概念自然不能在这里应用。虽然没有继承,但是过程依然可以调用过程,这也是一种重用。
------分割线------
补充一下:
优点: 对于大数据量的复杂的逻辑,减少网络传输。
充分利用了数据库本身的优化性能。
缺点:可移值性差。(虽然少有需要移值数据库的,不过现在我就要面对这个问题。要从sybase移到oracle,有近100个存储过程要我重写啊!)
19 楼 ddbird 2007-03-22 优点:
性能一般会有提高。(对于大数据量的复杂的逻辑,减少网络传输。充分利用了数据库本身的优化性能。 )
逻辑的修改可以即时发布,不需要编译和发布代码。
缺点:
不能应用面向对象的思路和设计。
调试困难。
可移值性差。
------------------------
Welcome every body, say what you want to say, please! 20 楼 liangguanhui 2007-03-22 在现在这种ORM满天飞的年代,非要用存储过程写Service,原因不外乎:
(1)客户要求。这个应该是最主要的原因,据我所知,银行、证券等对安全性要求极高的应用都会把逻辑写到数据库里。
(2)对性能要求比较苛刻。 21 楼 ddbird 2007-03-23 我希望大家看这个问题的时候不要带主观偏见,请尽量客观,我从头到尾都没有说过这样做是好还是坏。 我只是想通过集思广益,来探讨这种做法的有缺点,然后以后可以根据探讨的结果去思考什么情况下可以使用这种方法。 哪儿来的绝对的好和坏? 同时也不明白,是不是javaeye的高手很多,对这种问题不屑一顾了,38个新手评,可以的,不知道以后还敢不敢发贴来讨论了,真是faint