基于配置的ORMapping框架浅析之3(以自己开发的框架为例子)

本文深入探讨了一个基于配置的ORMapping框架,重点介绍了DataAccessor和DataMapper的角色。DataAccessor处理对象间的继承关系,而DataMapper负责外键关联及缓存调度。通过注册和配置,框架利用单例模式和Hashtable存储对象。配置文件如数据库、对象关系等在框架运行中起关键作用,其中对象关系配置文件用于描述对象继承和关联关系,为框架提供调度依据。
摘要由CSDN通过智能技术生成
 

注册和配置节

 

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

在上一节中我们可以看到,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对象

 

 

  1. Assembly assembly = Assembly.Load(each.DataAccessorAssembly);
  2. object provider = assembly.CreateInstance(each.DataAccessorFullTypeName);
  3. 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" /> 

 

对象关系配置文件的结构

  1. <BaseUser DomainObjectName="BaseUser" FullTypeName="Business.BaseUser" 
  2.             Modifier="AbstractClass" DataInstance="TestLocalConnection" ReadDataInstance="TestLocalConnection">
  3.     <DataAccessorConfigCollection>
  4.         <add DataAccessorVersion="InterfaceVersionDataAccessor" DataAccessorAssembly="Business"
  5.             DataAccessorFullTypeName="Business.BaseUserDataAccessor" />
  6.     </DataAccessorConfigCollection>
  7. </BaseUser>
  8. <Users DomainObjectName="Users" FullTypeName="Business.Users" 
  9.          Modifier="class" DataInstance="TestLocalConnection" ReadDataInstance="TestLocalConnection">
  10.     <DataMapperConfigCollection>
  11.         <add DataMapperAssembly="Business" DataMapperFullTypeName="Business.UsersDataMapper" />
  12.     </DataMapperConfigCollection>
  13.     <DataAccessorConfigCollection>
  14.         <add DataAccessorAssembly="Business" DataAccessorFullTypeName="Business.UsersDataAccessor" 
  15.             DataAccessorVersion="NormalVersionDataAccessor" />
  16.     </DataAccessorConfigCollection>
  17.     <GeneralizationConfigCollection>
  18.         <add BaseClass="BaseUser" BaseClassDataAccessorVersion="InterfaceVersionDataAccessor" />
  19.     </GeneralizationConfigCollection>
  20. </Users>

可以从上图中看出BaseUser 和Users的关系,DataAccessor内置代码就是根据这样的配置关系

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

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

 

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值