ORMapping 3

注册和配置节

 

补充一下上节的一些细节和考虑:

在上一节中我们可以看到,DataAccessor 和 DataMapper承担了和数据库打交道的作用(主要是DataAccessor )

DataMapper主要负责处理缓存等的调度。

这里要说说DataMapper,其实DataMapper的功能在开始设计的时候远不止这些

 

 

 

 

 

 

DataMapper的功能除了缓存等调度外,还包括 处理表间关联的作用

(注意:处理继承的作用是使用DataAccessor来处理的)

表之间的外键的关系是有DataMapper处理的,但由于框架采用的是key值关联的缘故,因此就不存在

取一个数据树的情况(即取一个对象的数据,要附带把其关联的其他的表对象的数据取出来)

 

如果你是以对象关联模式来设计框架的话,DataMapper的这个作用就显露出来了

 

核心:

DataAccessor 处理对象间继承的关系

DataMapper 处理对象间外键关联的关系

 

现在我们来说说注册:

一般我们在使用对象的时候都喜欢直接实例化  比如: CUserDataMapper obj =new CUserDataMapper ()

其实我们换一种做法,在系统启动的时候就将其全部注册进去,不用在这样直接New一个新对象出来

有好处也有坏处:我个人是比较喜欢这样的方式

DataMapperRegistry

IDataAccessorRegistry

FullVersionDataAccessorRegistry

InterfaceVersionDataAccessorRegistry

NormalVersionDataAccessorRegistry

 

它们使用了单例模式,使用Hashtable来存储

调用方法:

NormalVersionDataAccessorRegistry.GetNormalVersionDataAccessor(typeof(CUser).Name);

 

这个方法通过从对象关系配置文件中获取该对象所对应的DataAccessor的Assembly 和FullTypeName

然后使用反射生成这个DataAccessor对象

 

 

Assembly assembly =Assembly.Load(each.DataAccessorAssembly);
object provider =assembly.CreateInstance(each.DataAccessorFullTypeName);
AddNormalVersionDataAccessor(fullTypeName,(NormalVersionDataAccessor)provider);
以上这些都是基于从配置文件中读取相应的信息而生成的,那么框架大量使用了配置文件进行配置
微软企业库的配置文件块提供了这些帮助

框架总共产生4个配置文件

主配置调度文件:App.config

数据库配置文件:DatabaseConfig.config

缓存配置文件:cacheconfig.config

对象关系配置文件:DomainobjectConfig.config

AOP配置文件:AspectConfigSource.config

依赖注入配置文件:UnityConfig.config

 

App.config的结构

<add name="CacheConfigSource" type=""
       filePath="CacheConfig.config" />
<add name="DatabaseConfigSource" type=""
       filePath="DatabaseConfig.config" />
<add name="DomainObjectConfigSource" type=""
       filePath="DomainObjectConfig.config" />
<add name="UnityConfigSource" type=""
       filePath="UnityConfig.config" />
<add name="AspectConfigSource" type=""
       filePath="AspectConfigSource.config" />

 

对象关系配置文件的结构

<BaseUser DomainObjectName="BaseUser"FullTypeName="Business.BaseUser" 
           Modifier="AbstractClass" DataInstance="TestLocalConnection"ReadDataInstance="TestLocalConnection">

   <DataAccessorConfigCollection>
       <addDataAccessorVersion="InterfaceVersionDataAccessor"DataAccessorAssembly="Business"
           DataAccessorFullTypeName="Business.BaseUserDataAccessor"/>
   </DataAccessorConfigCollection>
</BaseUser>

 

<Users DomainObjectName="Users"FullTypeName="Business.Users" 
        Modifier="class" DataInstance="TestLocalConnection"ReadDataInstance="TestLocalConnection">

   <DataMapperConfigCollection>
       <add DataMapperAssembly="Business"DataMapperFullTypeName="Business.UsersDataMapper"/>
   </DataMapperConfigCollection>

   <DataAccessorConfigCollection>
       <add DataAccessorAssembly="Business"DataAccessorFullTypeName="Business.UsersDataAccessor" 
           DataAccessorVersion="NormalVersionDataAccessor"/>
   </DataAccessorConfigCollection>

   <GeneralizationConfigCollection>
       <add BaseClass="BaseUser"BaseClassDataAccessorVersion="InterfaceVersionDataAccessor"/>
   </GeneralizationConfigCollection>
</Users>
可以从上图中看出BaseUser 和Users的关系,DataAccessor内置代码就是根据这样的配置关系

去处理继承,数据库连接,反射实例化对象这些操作的

对象关系配置文件是框架的关键性配置文件,所有的调度都是根据配置来的。

 

其他的配置文件暂时不在这里讲解,将作为下面的专题内容进行讲解,比如AOP,依赖注入的功能


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gsnidi2002/archive/2008/09/04/2882160.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值