【ORM】相关探讨

来源:互联网 发布:2017网络诈骗案破案率 编辑:程序博客网 时间:2024/05/10 01:01

       一直以来,自己开发项目基本上都采用的ORM工具,很少去采用MS的ADO Helper, 之所以此前有这种想法, 可能是因使用ORM的“好处”所吸引, 从前任公司的XXDriver到国内开源的NBear、再到现在使用的NHibernate,基本都是这样的一个流程:

1、QDriver

      通过自身提供的Tool创建实体(单表、多表), 并封装了诸多的方法, 可以很Easy的Query、Insert、Update、Delete、批处理 Person p = new Person(); p... p.save(); 是偶用过的相对较简单较强大的Tool吧(体现在方便性上、性能未经测试,不一定很好)

2、NBear

      配置相对1似乎有一些繁琐,基本是:DbToEntityDesigns、DesignsToEntity 然后Web.config配置一下、pagebase实例化一个gateway 通过gateway就可以很方便的进行各种操作,并有很多封装的方法,如类型转化等在应用方面和1差不多的简单, 性能方面也还行。

3、NHibernate

      只所以接触到NH, 个人感觉是从Hibernate转移过来, 相对成熟, 而且支持的数据库种类最多,大概10种之多,但是NH的配置比较繁琐,当然似乎也提供了很多中配置方式,但从我应用的过程来看,每一个版本的NH,配置上都会有所变动,让人似乎感觉太累;总的说来NH非常强大,这点我们可以从它的CHM文档中看得到。

      最近在开发一个个人的项目,ORM也还是首选,起初是分析了采用NBear、NHibernate, 最后以NH的专业、成熟说服了自己,进而而放弃NBear。至后来开始对NH进行了进一步的Study,并对此实现进行了分析并封装些许的方法而后在接下来的项目中,出现了这样一个问题:

      系统要求对性能有所顾及,尤其是Query模式,所以一开始我便把Query于Insert、Update分开, 一半采用基本的DAO,另一半则采用的NH…… 后来想想这样似乎很不妥当, 首先NH的实现方式没法和现有的DA没法在直接代码上进行同一接口的实现这使系统似乎很凌乱,后面的切换似乎也不太可行,另外在性能上有所损失比较不爽!绕了一圈,后来返璞归真,采用Enterprise Library吧, 不用自己再进行那么多次的封装, 也不用每次每次拉Solution时都要处理Exception、Log、Config等等等等,做多了感觉忒繁琐、冗余!没必要的前提下也不用去做那么多的封装,想想自己一直以来封装的那么多东东,用也用到了,但似乎作用并不是很大(Utility、WScript、WControl、WCoder、…… NHDriver等等。)

       似乎每次开发项目都会权衡是否会采用ORM、还是采用基本的DA访问。也总会陷于这种困境,一种来得方便、快速,另一种则是轻小易整合,

      所以需要具体问题具体分析, 项目类型、后期发展、项目预期等等,个人觉得如果是外包、接单、短期等项目可以采用框架来辅助, 自身、公司的项目尽量采用原生的来完成。

4、Entity Framework

      长久以来,不少朋友一直在讨论数据访问层是否该选用ORM、是否采用存储过程、是否采用静态SQL等等,以及采用这些方法所带来的性能指标,可维护性、可扩展性又会如何。每个人都有不同的实施实践经历和自身体会,所以一般倾向有几种:ORM、存储过程 + (企业库 || SQLHelper)、静态SQL + (企业库 || SQLHelper)。先来看看每种方式的优劣:
ORM:好处自然不言而喻,但是多数时候其性能的劣势是个主要问题
SP:在过去的好多年当中,SP曾一度的给我们带来不小的便利,
      1、复用
      2、减少DB连接数
      3、处理复杂的业务逻辑
SQL:一般通过在APP中建立配置文件,配置静态化的SQL语句
      1、发布过程不需要DBA参与
      2、方便配置管理、维护
     

       但是在最终做出DAL方法选型时需要单独的权衡评估,如果项目对性能要求不是很高且对系统的扩展性有一定要求,选择ORM自然不在话下;相反,建议采用静态SQL、SP;如果对系统的性能要求介于不同层面,可结合EF、SP或静态SQL来实现;另外如果基于.NET平台并打算选择ORM来进行DAL开发,建议采用EF,原因大家都懂的~~,这里偶顺带罗列下EF相关学习资源列表:
 
 专题:
http://kb.cnblogs.com/zt/ef/
 系列: http://www.cnblogs.com/lsxqw2004/archive/2009/05/31/1495240.html
 http://www.cnblogs.com/chsword/category/111822.html

第一章(1) 开始学习Entity Framewor
http://www.cnblogs.com/judastree/archive/2012/08/23/2653484.html
第一章(2) 怎么用Entity Framework
http://www.cnblogs.com/judastree/archive/2012/08/24/2653790.html
第二章(1)创建一个简单的模型
http://www.cnblogs.com/judastree/archive/2012/08/25/2655770.html
第二章(2) 从已有数据库中创建模型
http://www.cnblogs.com/judastree/archive/2012/08/26/2657284.html
第二章(3)建立不带负载的多对多模型
http://www.cnblogs.com/judastree/archive/2012/08/26/2657419.html
第二章(4)建立负载的多对多模型
http://www.cnblogs.com/judastree/archive/2012/08/27/2658144.html
第二章(6)跨多表拆分一个实体
http://www.cnblogs.com/judastree/archive/2012/09/24/2700175.html
第二章(7)跨多实体拆分一张表
http://www.cnblogs.com/judastree/archive/2012/10/08/2714798.html

扩展:http://www.cnblogs.com/cate/ef
其他:http://www.infoq.com/cn/news/2012/02/EF-5
        http://news.cnblogs.com/n/146683/

 

 

原创粉丝点击