【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/
- 【ORM】相关探讨
- Ajax 相关技术探讨
- linux 深入探讨相关
- 创业相关的一些探讨
- sqlalchemy系列(2) orm相关简易操作
- 依赖注入,ORM及相关框架
- ORM的作用以及相关简介
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- 敏捷是另一颗银弹吗?
- Hello JavaDB
- 3流大学学生,工作两年的感想。
- 李开复 ---- 给中国学生的第七封信:21世纪最需要的7种人才
- 代码:查找子窗口
- 【ORM】相关探讨
- ClistCtrl 详解
- 应聘华为的朋友小心了,应聘华为的悲惨遭遇!
- 又一次分享面试经历(招聘职位:软件开发,上海xx网络科技公司)
- 用C#写水晶按钮
- 优秀.net程序员必经之路
- 上下班
- 第10天.
- 一道有点意思的题