Guushuuse .NET

领域驱动设计==哲学

导航

ORM(Object Relational Mapping,对象/关系映射)

ORM(Object Relational Mapping,对象/关系映射)
在考虑O/R Mapping的时候,有两个概念是经常会接触的,那就是VO和PO。
所谓的VO,就是Value Object,这种对象,只包含了对象的数据,而没有状态,或者说,处于瞬时状态。VO可以用来在层之间传递数据。
所谓PO,就是Persistent Object,就是持久化保存的对象,这种对象,一般是有状态的。O/R Mapping框架需要根据PO的状态,来执行相应的同数据库的交互。

在支持OO的语言中,继承是语言的基本特征。在ORM中,将一个继承体系映射到数据库表中,一共有三种映射策略。
Table per concrete class:每一个具体的类对应一张表。在这种策略下,从关系模型中完全抛弃多态和继承关系,将一个类映射到一个数据库表中,这个类的所有属性(包括从父类继承来的)映射的集合组成这个表的列。
Table per class hierarchy:每一个继承体系对应一张表。在这种策略下,通过不规则的关系模型支持多态,用一个识别器列(discriminator column)来标识类型信息,将具有相同父类的所有类都映射到一个数据库表中,这些类属性映射的集合组成这个表的列。
Table per subclass:每一个子类对应一张表,在这种策略下,通过外键关系来表示出继承关系,将每个类映射到对应的一个表,这个类的属性(不包括从父类继承来的非主键属性)映射组成这个表的列,在这种模式下,具有继承关系的类被映射到不同的表中。

对象关系型映射,最核心的要完成两个功能:对象和关系型之间的映射规则,以及两者之间的相互转换。
除了这两个基本的功能,一般的O/R Mapping产品还会加上一些额外的特性和功能,以加强产品的功能,为软件开发提供更多的方便和提高性能。一些常见的功能,例如缓存。
现在有一些典型的O/R Mapping框架可以参考和使用,比较著名的有EJB中的Entity Bean,JDO,Hibernate等,这些方案都是基于Java的。在Microsoft.Net平台下,相对来说可供选择的方案比较少,其中有NHibernate。

posted on 2008-05-16 12:42  guushuuse  阅读(401)  评论(0编辑  收藏  举报