Rafy 领域实体框架简介
有关 Rafy 整体框架的介绍,见:《福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!》,示例见:《Rafy 领域实体框架示例(1) - 转换传统三层应用程序》
最近,按照最新的功能,更新了最新版的《Rafy 领域实体框架的介绍》,内容如下:
本文包含以下章节:
- 简介
- 特点
- 优势
简介
Rafy 领域实体框架是一个轻量级 ORM 框架。
与一般的 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-2012、Oracle10、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 则提供了一体化解决方案,包括:仓库设计、分布式设计、托管属性设计、服务设计、界面绑定设计等。