基于配置的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对象

 

 

  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的结构

        filePath="CacheConfig.config" />
        filePath="DatabaseConfig.config" />
        filePath="DomainObjectConfig.config" />
        filePath="UnityConfig.config" />
        filePath="AspectConfigSource.config" /> 

 

对象关系配置文件的结构

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

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

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

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

 

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

 

 

 

 

你可能感兴趣的:(框架)