< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>

1. 业务实体层的设计方案选择

1) 业务实体层的作用

一般的应用程序分层的结构如下:

可见,在分层的时候,我们会增加一个实体层,它的作用如下:
         a. 将显示数据和实际的存储区域隔离,保证了业务的独立性,提高了可重用性。
         b. 在业务层和表现层之间传递数据。(如果没有实体层的话,我们需要把表的每个字段作为一个参数在它们之间传递,如果修改的话,将需要影响到程序的各个层)
         c. 提供更大的可收缩性。

2) 业务实体层的几种选择方案及其优缺点。

在.NET环境下实现业务实体有下面的几种选择:
         a. DataReader BE 具有最快的读取速度,用于只读的场合,不具有OO的概念。
         b. XML BE 可以与XML Reader和DataSet转换。缺点:性能低,验证、解析、显示、排序等都很复杂。
         c. Generic DataSet BE 优点:数据绑定等。缺点:客户端必须通过集合来获取数据,没有类型,实例化开销大,调度性能低。
         d. Typed DataSet BE 优点:由类型,可以进行类型检查。缺点:只能从DataSet继承,部署不方便,可扩展性差,实例化开销大,调度性能低。
         e. Custom BE 优点:性能调优,代码更具有可读性,用自定义实体类定义一个良好的接口,将复杂问题隐藏在其中。缺点:设计开发都很复杂,需要自己去实现CURD操作,自己去实现数据绑定,工作量很大。
         f. OR Mapping的实现 它具有自定义类的所有优点,同时实现了CRUD,数据绑定等操作。

2. 什么是OR Mapping?

ORM,即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
          让我们从OR开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
         当你开发一个应用程序的时候(不使用OR Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。
          如果打开你最近的程序,看看DAL代码,你肯定会看到很多近似的通用的模式。我们以保存对象的方法为例,你传入一个对象,为SqlCommand对象添加SqlParameter,把所有属性和对象对应,设置SqlCommand的CommandText属性为存储过程,然后运行SqlCommand。对于每个对象都要重复的写这些代码。
          除此之外,还有更好的办法吗?有,引入一个OR Mapping。实质上,一个OR Mapping会为你生成DAL。与其自己写DAL代码,不如用OR Mapping。你用OR Mapping保存,删除,读取对象,OR Mapping负责生成SQL,你只需要关心对象就好。

3. 为什么要采用OR Mapping?

1) 提高学习开发效率,降低开发成本。
         使用ORM可以大大降低学习和开发成本,现代技术的发展,使得我们不得不不停地学习。我们不仅要学习面向对象、UML、设计模式等知识,而且还需要学习Sql Server、ADO.NET、DataSet、DataReader等知识。而在实际的开发中,真正对客户有价值的是其独特的业务功能,而现在的现状是我们花费了大量的时间在编写数据访问,CRUD方法,包括后期的Bug查找,维护等也会花费相当多的时间在数据处理上。这就是说,我们在实际的开发中很多的时间都被浪费在根本不创造价值的非业务事件上了。
         在使用ORM之后,我们将不需要再浪费太多的时间在ADO.NET和Sql语句上。ORM框架已经把数据库转变成了我们熟悉的对象,我们将只需要了解面向对象开发就可以实现数据库应用程序的开发。

2) 简化代码,减少BUG数量。
         通过建立ORM系统,能够大量减少程序开发代码,实现ORM后,开发数据层就比较简单,大大减少了出错机会。
  
3) 提高性能
         同时通过Cache的实现,能够对性能进行调优,实现了ORM区隔了实际数据存储和业务层之间的关系,能够对每一层进行单独跟踪,增加了性能优化的可能。
  
4) 隔离数据源,可以很方便的转换数据库
         利用ORM可以将业务层与数据存储隔开,开发人员不需要关系实际存储的方式,如果我们需要把SQL Server数据库换成ORACLE数据库,只需要修改配置文件就可,不需要修改程序。

4. ORM典型工具介绍

由于ORM带来的强大功能,已经有很多公司或者个人提供ORM的工具。主要途径有三个:

a.微软提供的ObjectSpaces

  微软在VS.NET 2005的Alpha版中就提供了ObjectSpaces,它是在ADO.NET数据层上的一层ORM框架。但是,根据微软网站上提供的消息,ObjectSpaces将不会和VS.NET2005 一起发布,它可能会在2006(7)年和WinFS一起发布。所以可能无法在最近的项目中使用。

注:ObjectSpaces已经正式被在它基础上重新开发的 LinQ 所取代 

b.开放源码的免费ORM

  虽然.NET领域的开发源码还远远不及Java领域,但是已经有好多人把Java领域中的最优秀的开发源码转移到.NET平台上来。这其中包括做单元测试的NUnit,做日志的Log4NET,做AOP的pring.NET,以及我们要介绍的做ORM框架的NHibernate。
  
  开发源码的更新都很频繁,如果你发现Bug报上去后,他们将会很快在新发布的版本中进行更新。

  开发源码的作用不仅在于使用,而且他们本身都是非常优秀的架构。在购买计算机图书的时候有一句话叫“No Coding, No Reading”,而开放源码中提供了如何构建架构、如何使用模式的最好范例。
  
         关于NHibernate现在文档还不是很多,但是相信随着它的正式版的发布,会有越来越多的官方文章出现,也会有越来越多的使用者在网上提供自己的经验。当然,最直接和有效的方法还是去阅读它的源码,因为开放源码的内部实现机制全部透明,所以它的代码就是最好的文档。它的代码结构很清晰,用法更简洁,并不是很难阅读。

#c#专栏

O/R Mapping 研究报告(转)相关推荐

  1. 什么是O/RMapping?为什么要用O/R Mapping?

    什么是O/R Mapping ? O/R Mapping 就是有一大堆的类库,我们调用它的时候用面向对象的方式来调,它帮我们翻译成为面向关系的方式. 为什么要用O/R Mapping? 我们编程会更加 ...

  2. DataObjects.NET -- A Excellent O/R Mapping Framework!

    昨天在网上闲逛的时候,发现了一个不错的.NET O/R Mapping的组件. The hilighted feature of DataObjects.NET is the ability to h ...

  3. Hibernate---O/R Mapping

    1. JDBC数据库繁琐 2. sql语句不是面向对象 3. 可以在对象和关系表之间建立关联简化编程 4. O/R Mapping可以简化编程, 跨越数据库平台 比较流行的O/R Mapping Fr ...

  4. O/R Mapping再乱弹

    O/R Mapping再乱弹 转载于:https://www.cnblogs.com/drunkyong/archive/2006/06/10/422656.html

  5. 小评几种O/R Mapping工具

    LLBLGen Pro 满意度: 撞头度:        作为一个商业组件,可以说它是一个令我不知所措的一个工具,它提供的功能超出了我的想象,犹其在易用性上,提供了一个非常漂亮的界面,可以很自由的制作 ...

  6. 关于service层、dao层,以及O/R Mapping之间的思考

    部门最近正式进入oo的开发,采用了类似于petshop4的层次结构,简单来说,service层调用dao(当然是用配置文件+反射的方式),dao通过ibatis.net完成从数据库中的table到do ...

  7. 逆向而行—ASP的O/R MAPPING 使用解释

    整个的组件我给起了一个名字,叫"aurora"金山词霸中的解释是"黎明的女神, 极光" 使用方法: Step 1:       设计数据库(现在仅支持Acces ...

  8. Some thoughts on my own O/R Mapping or Code Generation tools

    Code tells: Categoryhas_many Forums,Name,nSortOrder,Forumbelongs_to Category,has_many Users as Moder ...

  9. 什么是OR MAPPING

    2.什么是持久化? 为什么要持久化? 1.什么是持久化? 本人找了好多文章都没有找到满意的答案,最后是从孙卫琴写的<精通Hibernate:Java对象持久化技术详解>中,看到如下的解释, ...

最新文章

  1. C#正则实现匹配一块代码段
  2. Flutter开发之倒计时/定时器(30)
  3. Django Model 自动生成 E-R 图
  4. python语言实现飞机大战
  5. 记我面试6家公司的感悟
  6. EL表达式的作用与限制条件
  7. Java分享笔记:自定义枚举类 使用enum关键字定义枚举类
  8. ★LeetCode(942)——增减字符串匹配(JavaScript)
  9. java堆是gc管理_JVM内存管理及GC机制
  10. 计算点到SVM超平面的距离
  11. JSP之实现分页查询
  12. C++ cout的使用,看这一篇就够了
  13. Linux 更换软件源
  14. 练习1000 scanf 用法
  15. 怎样安装2003服务器系统安装,Windows 2003系统详细安装教程图解
  16. 解决ubuntu16.04插耳机没有声音的问题
  17. 智能分析的所见即所得——基于Lambda架构的实时数据引擎
  18. 微信小程序连接WiFi
  19. POJ 2752 既是前缀又是后缀
  20. mscbsc移动通信论坛_中国移动5G资费被确认,流量低至1毛/G, 联通电信又被动,网友:良心价...

热门文章

  1. 对话图森无人车CEO陈默:IPO,我们只差最后一个必要条件
  2. 世道变了!这个AI竞赛不再要刷榜成绩,直接看商业落地计划书
  3. 用PyTorch实现的李沐《动手学深度学习》,登上GitHub热榜,获得700+星
  4. AI之父图灵登上50英镑钞票,荣耀比肩牛顿达尔文;吴恩达:将激励更多人
  5. 006-spring cloud gateway-GatewayAutoConfiguration核心配置-GatewayProperties初始化加载、Route初始化加载...
  6. HTML中DOM对象的属性和方法的层级关系是怎样的?(目录即层次)
  7. Spring 3 MVC and XML example
  8. 【Dijkstra】最短路径
  9. listview 滑动更改标题
  10. ASP.NET常被忽视的一些细节