AgileEAS.NET之ORM访问器

  上一篇文章 AgileEAS.NET之数据关系映射ORM简单介绍了一下AgileEAS.NET平台中ORM对象的组织机构体系,但并没有对其所执行的数据存取操作介绍,在AgileEAS.NET中,我对ORM实体及其上的数据操作实现进行了分离,实体对象只呈现数据,而实体的增加、修改、更新、删除、缓存操作都通过ORM访问器实现。
    在AgileEAS.NET两个访问器IOrmAccessor和ICacheAccessor访问器。
ORM2
IOrmAccessor完成ORM对象(实体和表)和数据库的交互工作:查询、增加、修改、删除极其辅助任务,其接口详细定义如下:
    /// <summary>
    /// 定义ORM访问器接口。	
    /// </summary>
    public interface IOrmAccessor : IOrmEnvironment
    {
        /// <summary>
        /// 保存数据实体。
        /// </summary>
        /// <param name="entity">数据实体。</param>
        void Save(IEntity entity);
        /// <summary>
        /// 保存数据表。
        /// </summary>
        /// <param name="table">表。</param>
        void Save(ITable table);
        /// <summary>
        /// 保存数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="force">是否强制同步到数据库。</param>
        void Save(ITable table,bool force);
        /// <summary>
        /// 保存数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="force">是否强制同步到数据库。</param>
        /// <param name="transaction">数据同步过程中是否使用事务。</param>
        void Save(ITable table, bool force, bool transaction);
        /// <summary>
        /// 保存数据架构。
        /// </summary>
        /// <param name="schema">架构。</param>
        void Save(ISchema schema);
        /// <summary>
        /// 保存数据架构。
        /// </summary>
        /// <param name="schema">架构。</param>
        /// <param name="force">是否强制同步到数据库。</param> 
        void Save(ISchema schema, bool force);
        /// <summary>
        /// 保存数据架构。
        /// </summary>
        /// <param name="schema">架构。</param>
        /// <param name="force">是否强制同步到数据库。</param> 
        /// <param name="transaction">数据同步过程中是否使用事务。</param>
        void Save(ISchema schema, bool force, bool transaction);
        /// <summary>
        /// 插入数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        void Insert(IEntity entity);
        /// <summary>
        /// 修改数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        void Update(IEntity entity);
        /// <summary>
        /// 删除数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        void Delete(IEntity entity);
        /// <summary>
        /// 删除数据表。
        /// </summary>
        /// <param name="table">数据表。</param>
        /// <remarks>
        /// 本方法相当于数据批量删除,一次性删除多条记录。
        /// </remarks>
        /// <remarks>删除的记录数。</remarks> 
        int Delete(ITable table);
        /// <summary>
        /// 根据条件删除数据表中记录。
        /// </summary>
        /// <param name="table">数据表。</param>
        /// <param name="condition">数据过滤条件。</param> 
        /// <remarks>删除的记录数。</remarks>
        int Delete(ITable table, Condition condition);
        /// <summary>
        /// 删除数据架构。
        /// </summary>
        /// <param name="schema">架构。</param>
        /// <remarks>
        /// 本方法相当于数据批量删除,一次删除多表多条记录。
        /// </remarks> 
        void Delete(ISchema schema);        
        /// <summary>
        /// 刷新数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        /// <returns>数据库中存在指定的数据体则返回true。</returns>
        bool Refresh(IEntity entity);
        /// <summary>
        /// 查询数据实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        /// <returns>数据库中存在指定的数据体则返回true。</returns>
        bool Query(IEntity entity);
        /// <summary>
        /// 判读实体是否存在于数据库。
        /// </summary>
        /// <param name="entity">实体。</param>
        bool ExistsInDb(IEntity entity);
        /// <summary>
        /// 表查询。
        /// </summary>
        /// <param name="table">表。</param>
        void Query(ITable table);
        /// <summary>
        /// 表查询。
        /// </summary>
        /// <param name="table">表。</param> 
        /// <param name="top">Top查询。</param>
        void Query(ITable table,int top);
        /// <summary>
        /// 表查询。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        void Query(ITable table, Condition condition);
        /// <summary>
        /// 表查询。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        /// <param name="top">Top查询。</param>
        void Query(ITable table, Condition condition, int top);
        /// <summary>
        /// 查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        DataTable GetDataTable(ITable table);
        /// <summary>
        /// 查询数据表。
        /// </summary>
        /// <param name="table">表。</param> 
        /// <param name="top">Top查询。</param>
        DataTable GetDataTable(ITable table, int top);
        /// <summary>
        /// 查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        DataTable GetDataTable(ITable table, Condition condition);
        /// <summary>
        /// 查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        /// <param name="top">Top查询。</param>
        DataTable GetDataTable(ITable table, Condition condition, int top);
    }
}
 
ICacheAccessor完成ORM对象的缓存查询及其辅助任务,其接口详细定义如下:
    /// <summary>
    /// 缓存访问器接口。
    /// </summary>
    /// <remarks>
    /// 为ORM对象提供缓存查询能力。
    /// </remarks>
    public interface ICacheAccessor : IOrmEnvironment
    {
        /// <summary>
        /// 缓存刷新实体。
        /// </summary>
        /// <param name="entity">实体。</param>
        void CacheRefresh(IEntity entity);
        /// <summary>
        /// 表缓存查询。
        /// </summary>
        /// <param name="table">表。</param>
        void CacheQuery(ITable table);
        /// <summary>
        /// 表缓存查询。
        /// </summary>
        /// <param name="table">表。</param> 
        /// <param name="top">Top查询。</param>
        void CacheQuery(ITable table, int top);
        /// <summary>
        /// 表缓存查询。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        void CacheQuery(ITable table, Condition condition);
        /// <summary>
        /// 表缓存查询。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        /// <param name="top">Top查询。</param>
        void CacheQuery(ITable table, Condition condition, int top);
        /// <summary>
        /// 缓存查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        DataTable GetCacheDataTable(ITable table);
        /// <summary>
        /// 缓存查询数据表。
        /// </summary>
        /// <param name="table">表。</param> 
        /// <param name="top">Top查询。</param>
        DataTable GetCacheDataTable(ITable table, int top);
        /// <summary>
        /// 缓存查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        DataTable GetCacheDataTable(ITable table, Condition condition);
        /// <summary>
        /// 缓存查询数据表。
        /// </summary>
        /// <param name="table">表。</param>
        /// <param name="condition">数据查询条件。</param>
        /// <param name="top">Top查询。</param>
        DataTable GetCacheDataTable(ITable table, Condition condition, int top);
    }

IOrmAccessor和ICacheAccessor都基于一个共同的接口IOrmEnvironment,IOrmEnvironment寓意为ORM操纵环境,根据类图可以看到IOrmAccessor和ICacheAccessor也坚决的继续于接口ISessionResource(会话资源),关我在后面的文章中专门介绍。
 
关于IOrmAccessor和ICacheAccessor详细方法和具体的实现思路我在本文暂时不做介绍,在AgileEAS.NET实现了基于本地数据访问器IDataAccessor的ORM实现,也实现了基于分布式WebService和Remoting的ORM访问器实现,在开发和使用过程中,同一实体对象可以在不同的ORM访问器中进行切换,只需要修改配置文件:
使用本地数据访问器:
<object name="MasterDbConnection" assembly="EAS.Data" type="EAS.Data.Access.OleDbConnection" LifestyleType="Singleton">
	<property name="ConnectionString" type="string" value="..." />
</object>
<object name="OrmAccessor" assembly="EAS.Data" type="EAS.Data.ORM.OrmAccessor" LifestyleType="Singleton">
	<property name="DbConnection" type="object" value="MasterDbConnection" />
</object>
<object name="CacheAccessor" assembly="EAS.Data" type="EAS.Data.ORM.CacheAccessor" LifestyleType="Singleton">
</object>
使用基于WebService实现的分布式访问器:
<object name="MasterDataAccessor" assembly="EAS.Distributed.WebServiceClient" type="EAS.Distributed.WebServiceClient.DataAccessor" LifestyleType="Singleton">
	<constructor-arg index="0" type="string" value="http://vm2003/Distributed/DataAccessService.asmx" />
</object>
<object name="MasterRMIAccessor" assembly="EAS.Distributed.WebServiceClient" type="EAS.Distributed.WebServiceClient.RMIAccessor" LifestyleType="Singleton">
	<constructor-arg index="0" type="string" value="http://vm2003/Distributed/RMIService.asmx" />
</object>
<object name="OrmTranser" assembly="EAS.Distributed.WebServiceClient" type="EAS.Distributed.WebServiceClient.OrmAccessor" LifestyleType="Singleton">
	<property name="DataAccessor" type="object" value="MasterDataAccessor" />
	<property name="RMIAccessor" type="object" value="MasterRMIAccessor" />
</object>
下一篇文章我简单说一下数据实现和UI的绑带。
 
      QQ群:120661978,125643764


本文转自 agilelab 51CTO博客,原文链接:http://blog.51cto.com/agilelab/561910
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/480407

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。