zoukankan      html  css  js  c++  java
  • 基于DotNet构件技术的企业级敏捷软件开发平台 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群:15118502

    链接:AgileEAS.NET应用开发平台介绍

    AgileEAS.NET之敏捷并行开发方法

    敏捷软件工程实验室

  • 相关阅读:
    虚拟机网络配置详解
    linux计划任务记录
    合并图片和加文字
    Linux下配置安装PHP环境
    js无刷新上传图片,服务端有生成缩略图,剪切图片,iphone图片旋转判断功能
    移动端上传图片iphone图片旋转以及服务端处理方法
    编码格式,网上看了资料还是乱码,就试下这个吧
    js 时间格式化 代码
    持续集成,持续交付,持续部署
    CDN(Content Distribution Network)概念
  • 原文地址:https://www.cnblogs.com/eastjade/p/1769041.html
Copyright © 2011-2022 走看看