Rafy 领域实体框架简介
按照最新的功能,更新了最新版的《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 则提供了一体化解决方案,包括:仓库设计、分布式设计、托管属性设计、服务设计、界面绑定设计等。
Rafy 领域实体框架简介的更多相关文章
- Rafy 领域实体框架 - 公司内部培训视频
本月给公司内部一个项目做架构重构,其中使用到了 Rafy 框架.所以我培训了 Rafy 领域实体框架的使用方法,过程中录制了视频,方便其他同事查看.现在把视频放到园里来分享下,有兴趣的朋友可以看看,有 ...
- Rafy 领域实体框架示例(1) - 转换传统三层应用程序
Rafy 领域实体框架发布后,虽然有帮助文档,许多朋友还是反映学习起来比较复杂,希望能开发一个示例程序,展示如何使用 Rafy 领域实体框架所以,本文通过使用 Rafy 领域实体框架来改造一个传统的三 ...
- Rafy 领域实体框架 - 树型实体功能(自关联表)
在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解. 场景 在开发数据库应用程序时,往往会遇到自关联表的场景.例如,分类信息.组织架构中的部门.文件夹信息等,都 ...
- Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成
前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能.由于在 09 年最初设计时,ORM 部分的设计并不是最重要 ...
- Rafy 领域实体框架演示(4) - 使用本地文件型数据库 SQLCE 绿色部署
本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能. <福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!> ...
- Rafy 领域实体框架演示(3) - 快速使用 C/S 架构部署
本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能. <福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!> ...
- Rafy 领域实体框架演示(2) - 新功能展示
本文的演示需要先完成上一篇文章中的演示:<Rafy 领域实体框架示例(1) - 转换传统三层应用程序>.在完成改造传统的三层系统之后,本文将讲解使用 Rafy 实体框架后带来的一些常用功能 ...
- Rafy 领域实体框架 - 领域模型设计器(建模工具)设计方案
去年4月,我们为 Rafy 框架添加了领域模型设计器组件.时隔一年,谨以本文,简要说明该领域模型设计器的设计思想. 设计目标 Rafy 实体框架中以领域驱动设计作为指导思想.所以在开发时,以领域建模为 ...
- 福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!
距离“上次框架完整发布”已经过去了一年半了,应群中的朋友要求,决定在国庆放假之际,把最新的框架发布出来,并把帮助文档整理出来,这样可以方便大家快速上手. 发布内容 注意,本次发布,只包含 Rafy ...
随机推荐
- design principle:java 回调与委派/委托机制
博客 design principle:模拟 android Button 控件点击事件 主要说了一下模拟 android 的 Listener 模式,其实这就是一种委派与回调机制的体现. 委派,也可 ...
- 【翻译】Ext JS 6早期访问版本发布
早期访问版本是什么 如何参与 都包括什么 Sencha Ext JS 6 Sencha Pivot Grid Sencha Cmd 6 JetBrains IDE插件 反馈 原文:Announcing ...
- 12.2、Libgdx的图像之清屏
(官网:www.libgdx.cn) 在Libgdx中的清屏操作不同于普通的OpenGL应用.唯一的不同是访问OpenGL context. 代码如下: @Override public void r ...
- Leetcode_128_Longest Consecutive Sequence
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43854597 Given an unsorted arra ...
- OpenCV 轮廓检测
使用OpenCV可以对图像的轮廓进行检测.这是之前用过的代码,挺简单的,回顾一下.主要要进行以下2步操作: 1.cvThreshold():对图像进行二值化处理 2.cvFindContours(): ...
- 套接字编程相关函数(1:套接字地址结构、字节序转换、IP地址转换)
1. 套接字地址结构 1.1 IPv4套接字地址结构 IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中.下 ...
- linux打包压缩常用命令
打包: zip gzip bzip2 tar xz //rar zip 包 zip xxx.zip test.c 压缩 unzip xxx.zip ...
- ITU-T Technical Paper: NP, QoS 和 QoE的框架以及它们的区别
本文翻译自ITU-T的Technical Paper:<How to increase QoS/QoE of IP-based platform(s) to regionally agreed ...
- OpenCV——PS 滤镜, 曝光过度
算法原理可以参考: PS 滤镜,曝光过度 #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include <io ...
- linux的link命令
sudo ln -s 源文件 目标文件 sudo ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin 建立软连接 ln -d existfil ...