注册和配置节
补充一下上节的一些细节和考虑:
在上一节中我们可以看到,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