Rafy 领域实体框架简介

img

按照最新的功能,更新了最新版的《Rafy 领域实体框架的介绍》,内容以下:html


本文包含如下章节:git

  • 简介
  • 特色
  • 优点

简介

Rafy 领域实体框架是一个轻量级 ORM 框架。github

与通常的 ORM 框架不一样的是,它不仅关注于通常性的面向对象实体与关系数据库的映射,而是更关注于富领域模型(聚合实体)与关系数据库的映射。使得开发者能够很是方便地使用富领域模型的同时,配备强大的实体属性设计、查询功能,并兼顾了极高的开发效率。数据库

该框架可脱离 Rafy 框架其它组件独立运行,同时集领域驱动设计、面向服务架构、模型驱动架构、产品线工程方法于一身,是 Rafy 框架中其它组件(如界面生成框架等高级功能)的基础。架构

Rafy 领域实体框架目前已经在大量的真实产品、项目中被应用,且口碑较好。咱们常常会在开发者在使用后收取使用者的反馈。开发者在使用以后,特别是能熟练使用此框架以后,每每以为经过此框架来开发应用程序,开发效率较高。框架自己也针对平时开发过程当中一些常常须要处理的场景提供了易用的解决方案,这能让开发者更加专一于业务逻辑、而不是技术问题。这也正是领域驱动设计的核心设计哲学。框架

特色

Rafy 领域实体框架,有如下特色:分布式

  • 领域驱动设计
    相对于一些注重概念、使用复杂的 DDD 框架,Rafy 更加注重实践。实现了 DDD 中与实际开发结合紧密的重要概念:聚合实体、标识、仓库、服务、分层架构、CQRS,同时保证了开发的易用性。详情参见:Rafy 与经典 DDD 的关系。 实体基类的设计支持关系的延迟加载、自动冗余属性、大对象属性、数据绑定、树型实体等。详情见:领域实体。
    实体使用了自定义属性系统(托管属性框架)。这使得运行时能够再也不使用反射,而是使用内置的属性管理方式,运行效率更高。同时,这些属性的 API 直接公布,更方便开发人员编写面向本身应用的框架。详情见:实体属性。
    仓库基类则实现了组合实体的添加、删除、修改,并提供了大量的默认查询。详情见:实体仓库。
    领域服务是跨组合实体的业务逻辑的封装体,也是 SOA 架构的基础。详情见:领域服务。组件化

  • 插件化(组件化)架构
    Rafy 实体框架相对于传统的 ORM 框架,一个很大的不一样在于支持插件化的架构。
    实体的插件化使得咱们能够把一组相关的实体封装为一个业务组件,并最终逐渐造成一个业务组件的仓库。当开发新的应用程序时,能够在业务组件中选择相关组件进行组装,以实如今业务级别上的更高层次的重用。
    可是,业务组件要实现真正的重用,须要给出不一样的层次的扩展点。不然,使用者会由于当前业务组件能力的不足而不得不选择弃用该组件,转而自行从新开发相似的功能。这是目前大量组件化框架所遇到的最大问题。针对这个问题,基于 Rafy 编写的实体组件,内置提供了多种多样的扩展点:实体属性的扩展(添加新的属性、替换当前属性的逻辑)、查询的扩展(添加新查询、替换当前查询逻辑)、业务控制器的扩展(添加新逻辑、替换当前逻辑、替换整个控制器)、服务的扩展。这些扩展点均可以由额外的新插件来完成,而无须要修改当前插件的源码。这样的方式使得组件的使用者在组件自己能力不够时,不须要弃用该组件,而是直接编写新插件来扩展该组件便可,进而大大提高了组件的重用度。
    详情见:产品线工程、插件化架构、现有插件。单元测试

  • CodeFirst 开发模式
    使用 Rafy 领域实体框架,采用 CodeFirst 开发模式,可使得开发人员在开发过程当中只关心领域实体的关系、属性,而不须要关心数据库结构的变化。
    在开发过程当中,只须要配置好数据库链接后,建库、建表、建字段都会由 Rafy 完成。实体结构上的变化:类型、属性、关系,都会由 Rafy 自动同步到数据库上。相对于传统的三层应用程序,在实体中添加、删除一个字段,开发人员再也不须要修改应用程序的数据库、DAL、BLL代码,而由框架自动同步,大大提升了开发效率。
    同时,生成的数据库知足第三泛式的要求。
    详情参见:数据库同步功能。测试

  • 支持 Net Standard
    最新的 Rafy 领域实体框架是基于 Net Standard 版原本开发的,也就意味着它能够很好地配合 .Net Core 来实现跨平台(Windows、Linux、MacOS)。

  • 多数据库支持
    Rafy 领域实体框架支持把同一份实体代码映射到多种数据库。开发者切换数据库时,只须要简单地修改链接字符串便可。
    目前已经支持了 SqlServer 2005-20十二、Oracle十、MySql,以及文件型数据库 SQLCE4。其它数据库的支持也在研发中。
    详情参见:多数据库支持。

  • 支持部署为单机、直连、分布式等多种应用程序
    领域实体框架在设计初就已经考虑到了各类可能会被使用的应用程序类型。目前也已经在不少类型的真实项目中被应用,稳定,高效。开发者能够在各类类型的应用程序中使用 Rafy 领域实体框架:

  • 单机应用程序
    简单的一些本地程序,通常使用 SQLCE 文件型数据库(SqlLite 正在支持中……)。

  • 直连数据库程序
    与单机应用程序相似,在此类程序中可以使用 Rafy 直连数据库,如 SQLServer、Oracle、MySql 等。

  • 分布式应用程序
    Rafy 中的领域实体自己可直接用于分布式传输,因此能够很是方便地开发客户端+服务端(C/S)程序。另外,实体仓库的设计,使得开发者不须要修改一行代码,便可无缝支持分布式远程调用。
    也就是说,使用 Rafy 编写的实体、查询、服务,原生就支持分布式的部署方式。既能够部署为直接链接数据库,也能够部署为客户端经过服务来间接访问数据库。同时,Rafy 针对分布式传输进行了优化,如:基于自定义的托管属性框架,在对实体的数据进行序列化时,只会传输有效数据,而不会传输实体中默认的空数据,也提升了数据传输的效率。
    部署的相关内容,详情参见:部署。

  • 零配置
    框架的使用对开发人员要求很是简单,默认状况下基本不须要做任何配置。这样提升了开发的效率。
    Rafy 框架的快速开发思想之一是支持默认值,尽可能少使用配置。在必要时,仅需很是少的配置便可达到运行时的灵活变化。

  • 与 VS 集成
    Rafy 的一个重要做用就是为了提高开发效率,因此咱们为 VisualStudio 开发了 RafySDK 插件,其中包含项目模板、代码生成、领域建模等功能。一体化的开发环境,能够更加快速地开发 Rafy 应用程序。

  • 稳定、质量有保障
    领域实体框架的代码行有 5 万多行。为了保证框架的稳定性及运行质量,咱们为框架编写了 700 多个单元测试,以测试框架的各个功能是否运转正常并保证兼容性。

优点

与 EF、NH 等传统 ORM 框架相比,使用 Rafy 领域实体框架的优点在于:

  • 领域驱动设计:传统 ORM 只是为了解决面向对象类型与关系数据库的映射,而 Rafy 解决的是领域实体(领域模型)与关系数据库的映射。

  • 插件化架构、产品线工程:使得通用业务逻辑真正可以以插件的形式开发,并真正能实施业务组件级别的大规模重用。例如:现有插件。

  • 传统 ORM 只作数据处理,开发人员不得不继续考虑不少其它的问题,例如分层架构、分布式传输、远程懒加载、界面数据绑定等功能;而 Rafy 则提供了一体化解决方案,包括:仓库设计、分布式设计、托管属性设计、服务设计、界面绑定设计等。

相关文章
相关标签/搜索