基于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之敏捷并行开发方法

敏捷软件工程实验室


作者:魏琼东 
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教! 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。


    本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/07/01/1769041.html,如需转载请自行联系原作者


相关文章
|
1月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
27 5
|
1月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
35 4
|
1月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
39 3
|
1月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
25 3
|
1月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
36 3
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
51 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
82 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
60 0
|
4月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
4月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
151 0