a)升两星:按规矩散分,谢谢各位同仁的支持,请大家继续支持CSDN;b)给大家个承诺:以后决不up、顶自己不懂的问题(当然散分帖例外,呵呵),不管给分多少,认真回复每个帖子,如觉得本人有能力解决的问题可直接短消息通知,请大家监督;
顺便告诉大家,本人一直专注于服务器控件及ADO.NET这两部分的开发,应该还算知道点东西,希望跟大家交流,我晚上QQ(37559811)一般在线,加我时请注明:CSDN,我的BLOG:http://www.cnblogs.com/hedonister,有问题可以在上面留言,尽最大努力帮您解决问题;c)问大家个技术问题,希望大家知道的认真回答:
最近一直在研究系统架构,而且也考虑过几个系统的架构,可是看书上网上介绍所谓的三层架构,有的说数据处理层采用存储过程比较好,还有的使用自己或微软提供的数据处理类实现,请问:你或你所在的团队是如何做的,你觉得哪种更好,其利弊?希望探讨一下d)本帖拒绝up,jf,gz之类的回复,决不给分,请至少发表一点意见,谢谢支持……

解决方案 »

  1.   

    先支持一把,感谢老兄一直以来的热心,帮我解决过不少问题再说说我对数据处理层的看法,我认为还是把它放在存储过程比较好,可以有效的防止sql攻击,但是数据库移植就差了
      

  2.   

    建议试试O/R Mapping 解决方案
      

  3.   

    祝贺,虽然2星已经到顶了,但是更要努力学习,认真回答问题,星星是责任而不是荣耀。
    你的问题:在我们公司的web因为是分布式的(remoting和webservice都用),所以逻辑层和表现层分开的,数据访问层用微软的,微软现在出Enterprise Library Block了,应该更不错吧,没有用过,我们现在用微软以前的daab 2.0作为数据访问层的。
      

  4.   

    呵呵,我也发点自己的个人意见!存储过程我觉得在适当的时候用是很不错的!比如在处理大量数据时我想是一定得用上的,如果不算是很大型的呢,我觉得倒不一定需要了。。而且三层结构也已经在数据层引用上SQL存储过程了啊,可以直接应用在三层结构上。PetShop1.5就是一个例子啊,都是用存储过程的,感觉还行!
      

  5.   

    存储过程相比SQL语句方式有以下好处:
    1、可以接受输入参数,并以输出参数的形式将多个值返回至调用过程或批处理;
    2、可以向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因); 3、允许模块化程序设计。只需要创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改; 4、减少网络流量。存储过程的主体存储在数据库服务器端,程序中调用时只需要传递存储过程的名称即可。SQL语句需要将语句主体传递到数据库服务器端,在数据库与程序执行端分别是两台主机的情况下,SQL语句方式会占用更大的网络流量;
    5、使用存储过程还可以有效的防止SQL注入式攻击;
    6、存储过程存储在数据库系统端,创建时在数据库服务器端被编译,其执行速度比SQL语句快。
    至于数据访问层,一般采用微软的 SqlHelper.cs ,只是略加改造而已!原因是:这是微软自己写的东东,是非常成熟的,而自己写的肯定或多或少的存在这样或那样的 Bug,故而很少自己写这方面的代码,把主要精力放在了业务逻辑层的实现上!只是个人见解而已!  呵呵
      

  6.   

    我想升星,路漫漫啊~~~~~~~~~支持csdn~
      

  7.   

    我们公司的bs开发团队构建了整个.net开发框架。
    数据层方法采用了工厂模式,接口,而目前采用的数据库有sqlserver和orcle,这两种数据库都支持存贮过程,所以我们一般将一些业务放在存贮过程里头来实现。因为用到工厂和接口,因而不存在换数据库而带来升级的麻烦。个人觉得这种架构还是蛮有错的。。
    一向都讨厌将sql语句直接写在代码里头。
      

  8.   

    我个人倾向于使用存储过程,特别是大项目时,对数据库的操作我几乎全是用存储过程的。我觉得有以下几个好处:
    1、易更新。(不用改程序)
    2、能有效防止SQL注入攻击。
    3、效率更高。(因为在服务器端执行,执行更快,且可以有效减少网络传送量。当然,如果你有上千个人同时更新时我不知道服务器能不能承受得了,想有这样的峰值却还没有遇到过。)
    4、代码书写简单。(因为我做成了公用的存储过程调用类,所以只要给我的类传送几个参数即可)
      

  9.   

    不知道什么叫构架
    只知道尽量把复杂的数据处理用存储过程来写,这样可以有效的保证数据的正确行。虽然.net里也提供了事务的功能,但是个人觉得还是数据库里的用的爽
      

  10.   

    to:     zipo(知其然,不知其所以然!) 怎么这么快就爬到两星的?除了up之外
    还有什么秘诀和哥们说说啊!??
    --------------------------------------------当然了,我承认有很多分是up来的,但是谈到秘诀我有一点可以告诉你,那就是针对某个自己会的问题,要力争帮问题者解决,不厌其烦的回复,实在不行还可以叫他传工程过来帮他找问题,对于自己懂但是不知道原理的要想法搞懂,比如问同事网友查资料,自己也学到东西了不说,难道楼主不会感动?我就有很多次这样的;
    你觉得你能做到吗?要是你觉得可以,你很快要升n星了
      

  11.   

    用存储过程还是很方便的
    1.可以批量执行sql语句,根据返回值来判断运行期的错误
    2.sql语句不需要预编译,执行效率高
    3.只需要传递参数,防止sql攻击,安全性高我们这里底端数据访问层使用改造后的Microsoft Data Access Application Block,效率挺高,数据逻辑层全部使用接口来实现,这样以来,如果只是数据库变化,只需要重新设计变化后数据库的存储过程,其他上层逻辑都不需要变化,还是比较合理的
      

  12.   

    我们公司一直是用t-sql直接写的,不过用3层架构,所以除了数据入口层以外,其他的层根本就无法看到sql语句,所以这样做结构也还是蛮清晰的。
      

  13.   

    自己开发通用的数据访问框架,Microsoft Data Access Application Block有局限不好用.
    它本身和数据库类型偶合高,必须为不同数据库写一个,维护整个访问框架很不方便.
    在业务逻辑直接调用Data Access,数据库访问代码(访问具体表的操作)很难得到重用,
    如果把这些访问代码单独抽到一个层里(访问层),访问层再通过Data Access操作数据这时就出现问题,
    业务逻辑灵活地调用各个访问类时事务需求很不灵活,事务对每个业务逻辑操作都非常重要的.
    我不喜欢用存储过程,感觉代码重用性低,可能我不太会用.
    现在尝试用NHibernate
      

  14.   

    具体问题具体分析,如何分层分几层是否用存储过程还要和项目的需要以及采用某种结构带来的便利性决定的.我们现在的项目客户要求不能用存储过程!前一个日本的项目感觉构架的比较有特点.数据库访问逻辑,参数构造逻辑,sql语句模块处于并行的最底层,中间层做了简单封装和逻辑控制,表示层就直接用了!
      

  15.   

    还是觉得存储过程好
    不过,俺公司用的是BEA的tuxedo,总觉得到其他地方就无用武之地了
      

  16.   

    morality(业精于勤,行成于思!) 
    你说的这个SqlHelper.cs
    --------------------------
    我找不到,请问在哪可以找到
      

  17.   

    请问楼上提到的sqlhelper.cs 在哪里可以找到啊
      

  18.   

    [email protected] 
    谢谢
      

  19.   

    我倒对现在有些项目用数据实体类感兴趣,代码中的sql语句减少了很多,跟数据库的耦合也比较低
      

  20.   

    发给我了吗?我没收到,我是[email protected]
      

  21.   

    to fenglik(风易) guanjm(st.human)两位兄弟,我们公司的网速实在慢得很,一个附件半天上不去,我晚上回家给你们发,见谅~~~~
      

  22.   

    to fenglik(风易) guanjm(st.human)两位兄弟,我们公司的网速实在慢得很,一个附件半天上不去,我晚上回家给你们发,见谅~~~~
    ----------------------------------------
      

  23.   

    大家能说的都说了,我也不长篇大论了!个人认为--复杂的就用存储过程,简单的就直接写SQL。至于防注入式攻击,注意点就行了!!
      

  24.   

    No Problem.Thank you all the same!!!