今天在就业务处理逻辑主要应该写在代码的商业逻辑层里还是存储过程里和朋友发生了争论。
请大家看看:
我的观点:
1、存储过程虽然速度快,但不可滥用。除了对处理速度要求很高的部分及需要大批量处理数据的商业功能以外,存储过程应尽量少用。
2、存储过程编码是一种面向过程的编程形式。由于没有面向对象,程序在复用及可维护方面很差。
如果商业逻辑过多采用存储过程形式就会对以后的维护造成麻烦。
3、存储过程的开发环境也比标准vs的IDE环境差一截,编写较长编码时明显感到不便。
4、微软自己的例子-petshop中3.0版一个存储过程都没有,4.0版也不是很多。可见微软也不赞成滥用存储过程。
朋友观点:
1、存储过程速度快,同时由于整个软件里只有一份,维护方便。
2、存储过程对并发冲突支持得好。可避免并发冲突问题(这个我认为在程序中直接编码只要采用事务处理就可以解决)我们两人谁也说服不了谁,请高手们指点一二,谢谢!!

解决方案 »

  1.   

    那你看看企业几开发示例的说明
    据说连一个sql语句都封装 成存储过程
    这个例子在msdn里可找到文档,购买股票的但我觉得ms别有用心 吼吼
      

  2.   

    如果软件更新不频繁的话我选B反之选A。PETSHOP为了方便大家学习ASP。NET而不是SQL所以存储过程用的少吧。
      

  3.   

    其实写在存储过程里与写在逻辑层是一样的,若你的数据库不迁移到另一个数据库(sql-oracle)这种情情况就不便于写存储过程,反之,写存储过程要好些,维护也方便,而且速度快,但要注意对硬件性能要求要高些。(这个我们都做过测试的)
      

  4.   

    1、存储过程虽然速度快,但不可滥用。除了对处理速度要求很高的部分及需要大批量处理数据的商业功能以外,存储过程应尽量少用。
    ================》
    什么叫滥用?为什么要尽量少用???????????2、存储过程编码是一种面向过程的编程形式。由于没有面向对象,程序在复用及可维护方面很差。如果商业逻辑过多采用存储过程形式就会对以后的维护造成麻烦。
    ===================>
    你的系统架构是否是面对对象的,和使用存储过程又有多大关系??3、存储过程的开发环境也比标准vs的IDE环境差一截,编写较长编码时明显感到不便。
    ==================》
    这决不能成为少用或不用存储过程的理由!!如果用SQL Server,我会用查询分析器来调试,用Oracle那当然是PL/SQL Developer了。4、微软自己的例子-petshop中3.0版一个存储过程都没有,4.0版也不是很多。可见微软也不赞成滥用存储过程。
    ===================>
    petshop 中没用存储过程,微软已经解释过原因,是因为这个示例程序是用来和Java版的petshop进行性能及代码量等方面对比的,没使用存储过程就是为了公平,因为评判标准Middleware Bench specification中规定不允许使用存储过程,请看源文:
    --------<以下为引用>---------------
    With the .NET Pet Shop we took the conscious decision not to use stored procedures in the application as this might be seen to be an unfair advantage for the .NET solution in the Middleware Bench. In reality the difference in performance is small because the application is relatively simple and most of the SQL statement execution plans are cached in the database. However, for purposes of the Middleware Bench specification, which disallows the use of stored procedures even to wrap simple SQL statements, the .NET Pet Shop 3.0 uses no stored procedures.
    参见:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/petshop3x.asp
    -----------<引用结束>-------------在我做过的项目中,除了非常简单的SQL语句外一般都会选择用存储过程,使用存储过程不利的一点是无法跨数据库,不同厂商的数据库的存储过程语法都不一样,所以存储过程无法移植,如果你的程序可能以后要转移到其它数据库,那么使用存储过程就要慎重,不过象我现在做的这些项目中,不用存储过程,很多复杂的业务逻辑根本就很难甚至没法实现,而且这些项目也没有移植数据库的打算,所以稍长点的SQL语句我都会选择放在存储过程中,尤其是在报表方面(我们用水晶报表),我都是用存储过程来获取数据,用自定义的数据集xsd文件做为报表设计时的数据源进行设计,运行时用推模式载入数据,这样的好处是报表设计好就不用再改,获取数据这些业务规则都在存储过程中实现,任何时间业务规则有变动,我们只需要改动存储过程然后重新编译一下即可,无需重新设计报表及编译程序,另外在Oracle中,相关的PL/SQL语句都可以放在一个包中,这样非常容易维护管理。-------------------个人意见,仅供参考(www.webdiyer.com)-------------------