基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ORM访问器

简介: 上一篇文章AgileEAS.NET之数据关系映射ORM简单介绍了一下AgileEAS.NET平台中ORM对象的组织机构体系,但并没有对其所执行的数据存取操作介绍,在AgileEAS.NET中,我对ORM实体及其上的数据操作实现进行了分离,实体对象只呈现数据,而实体的增加、修改、更新、删除、缓存操作都通过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之敏捷并行开发方法

敏捷软件工程实验室

目录
相关文章
|
4天前
|
Linux API C#
基于 .NET 开发的多功能流媒体管理控制平台
基于 .NET 开发的多功能流媒体管理控制平台
|
5月前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
138 4
|
5月前
|
人工智能 物联网 开发者
.NET技术在现代软件开发中的应用愈发广泛和深入
.NET技术是软件开发的关键支柱,本文分为三部分探讨其创新应用:最新进展如.NET 5/6统一平台、性能提升、跨平台支持增强、云集成优化及开源社区贡献;应用场景涵盖微服务架构、物联网、AI/机器学习、游戏及移动应用开发;未来发展潜力在于持续性能优化、云原生支持、新兴技术集成、生态扩张及教育培训加强。.NET正以其强大适应性和创新潜力引领软件开发的新方向。
56 3
|
2月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
31 5
|
2月前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
36 4
|
2月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
45 3
|
2月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
36 3
|
2月前
|
存储 设计模式 编解码
.NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
【11月更文挑战第5天】本文分析了.NET 8.0 通用管理平台在模块化、WinForms 和 WPF 方面的优势。模块化设计提升了系统的可维护性和可扩展性,提高了代码复用性;WinForms 提供了丰富的控件库和简单易用的开发模式,技术成熟稳定;WPF 支持强大的数据绑定和 MVVM 模式,具备丰富的图形和动画功能,以及灵活的布局系统。
|
6月前
|
人工智能 物联网 开发工具
.NET技术:多元语言、丰富库与跨平台能力引领软件开发新纪元。
`【7月更文挑战第4天】.NET技术:多元语言、丰富库与跨平台能力引领软件开发新纪元。从企业应用、云服务到游戏开发,其角色日益凸显。随着微软的持续创新与社区合作,未来.NET将在物联网、AI等领域拓宽应用,开发者应把握趋势,共创未来。`
51 0
|
4月前
|
人工智能 前端开发 Devops
.NET技术自发布以来,在软件开发领域发挥了重要作用
【9月更文挑战第12天】.NET技术自发布以来,在软件开发领域发挥了重要作用。本文分为三部分探讨其在现代开发中的应用:首先介绍.NET的核心价值,包括语言多样性、强大的开发工具支持、丰富的类库、跨平台能力和活跃的社区;接着分析其在企业级应用、Web开发、移动应用、云服务及游戏开发中的实际应用;最后讨论.NET面临的挑战与未来趋势,如性能优化、容器化、AI集成及跨平台框架竞争等。通过不断的技术创新和社区驱动,.NET将持续推动软件开发的进步。
51 4