如何高效地使用XCodeFactory自动生成的数据层代码(二)

来源:互联网 发布:php源码保护 编辑:程序博客网 时间:2024/05/16 18:38

前面一篇文章介绍了一些基础了用法,我们在这篇文章中,作一深入的思考。在企业级的应用开发中,数据层有两个最常见的需求那就是数据库类型切换和缓存经常使用的数据。我在EnterpiseServerBase中给出了相应的组件对此进行直接的支持。只要将XCodeFactory生成的数据层代码和EnterpiseServerBase中的某些组件配合起来就可以轻松的做到以上两点。

首先来说,数据库类型的切换。XCodeFactory1.0暂时生成的是基于SQLServer数据库的代码,实际上它可以生成基于OLEOracle的代码,在下一版本中将会开放此功能给大家,到时大家可以根据需要生成不同数据库类型的访问类。如果你需要在SQLserverOracle数据库之间切换,可以按如下方式进行。首先,使用XCodeFactory生成针对SQLserverOracle的访问类,访问类的名字类似StudentSqlDealer和StudentOracleDealer 。然后打开EnterpriseServerBase.DataAccess.CommonInformation.cs文件,将InitializeDBAccesserFactory方法中的factory.Initialize(DataBaseType.SqlServer ,CommonInformation.ConnectStr ,true) ;改为factory.Initialize(DataBaseType.Oracle,CommonInformation.ConnectStr ,true) ;

即可切换到Oracle数据库。其它的都不用改,就这么简单!!!想了解其内部究竟如何实现可以参见EnterpiseServerBase源码。

 

 

 

 

接下来讨论常用数据的缓存。我使用IAptoticDataManager接口来处理数据缓存。

IAptoticDataManager 用于管理在整个系统运行过程中经常使用但又不易发生变化的数据,通常这些数据的量大,它们存放于数据库中,如果每次需要时就访问数据库,势必降低系统的整个性能。另外提供了updateMinutes参数,该参数指定定时同步内存中的数据与数据库中的数据一致。

public interface IAptoticDataManager :IDisposable

    {

        //aptDataInfos 中是AptoticDataInformation集合

        void Initialize(ArrayList aptDataInfos  ,DataBaseType dbType ,int updateMinutes) ; //updateMinutes为-1表示不更新     

        void ClearAllData() ;

        void UpdateData() ;

 

 

        void     ClearData(Type dataClassType) ; //如果目标程序修改了部分不易变数据,应调用此方法通知IAptoticDataManager。

        object   GetData(Type dataClassType ,string ID) ;

        object[] GetAllData(Type dataClassType) ;

    }

   

 

 

    public class AptoticDataInformation

    {      

        public string ConnStr    ;

        public Type DataClassType ; //类型全名,包括命名空间部分

        public bool LoadNow ;

    }

 

 

需要说明的几点如下:

(1)IAptoticDataManager 一般在系统启动时就载入部分数据,而另外一些数据在第一次使用时才载入。

(2)IAptoticDataManager 还可以在运行的过程中新添其它的Aptotic数据。

(3)如果系统的特征是长时间运行,那么可以设定自动更新时间,以使IAptoticDataManager中保存的数据与数据库中的同步。

 (4)请不要访问由GetData返回对象的UnAptotic部分。

(5)被缓存的数据对应的Table要求必须有一个字段为"ID"表示唯一索引 。

 

 

不出你所料,IAptoticDataManager及其默认实现都是在EnterpriseServerBase类库中。

 

 

如果你需要EnterpriseServerBase的源码,可以email向我索取。

 

 

原创粉丝点击