领域实体框架Rafy2 发布了
在2009年我在codeplex发布了1.0版本OpenExpressApp,下载地址:http://openexpressapp.codeplex.com/。OEA 1.0 作为我十多年开发工作的一个思想开发平台雏形,它的开源发布可以作为有志于自己开发框架平台的同学学习和借鉴,在园子里曾经也写过一系列的相关文章,例如 OpenExpressApp make business engineers develop applications 等。
很高兴在这么长的日子里,还时不时收到大家通过各种方式对OEA进展的关心,然而每每这个时刻我心里总觉得有点“对不起”大家,因为自从我迷恋上敏捷个人 http://agileme.codeplex.com/ 之后,我就开始移情别恋,不再追求OEA了。
OEA也可以作为你真正工作中的利器,OEA1.0在我的实际工作中已经使用过了,今天我要高兴的告诉大家,OEA一直以来并没有停止开发过,现在由胡庆访再主导开发中,他是我在工作中对框架平台开发中比较执着追求的一个同事,在对OEA1.0背后的开发思想的理解之上,在12年3月发布了框架2.0,经过在实际工作中大大小小项目的使用,OEA变得更为强大和有力。
今天,OEA改名为Rafy,并首次发布Rafy框架体系中的基础引擎:领域实体框架。至于Rafy代表什么含义,大家先来猜一下:)以下我简要的对Rafy进行一下说明,如果你希望试用一下,可以在 http://t.cn/zRyIPvd 下载
Rafy 领域实体框架简要说明
Rafy 集领域驱动设计、面向服务架构、模型驱动架构、产品线工程方法于一体,为开发人员提供了强大的功能、快速的开发效率以及快乐的体验。Rafy 领域实体框架是一个 ORM 框架,作为 Rafy 平台中其它部分(如界面生成框架)的基础,它也可脱离平台单独在你的工作环境中使用。
特点
1. 领域驱动设计
相对于一些注重概念、使用复杂的 DDD 框架,Rafy 更加注重实践。实现了 DDD 中与实际开发结合紧密的重要概念:聚合实体、标识、仓库、服务、分层架构、CQRS,同时保证了开发的易用性。
- 实体基类的设计支持关系的延迟加载、自动冗余属性、大对象属性、数据绑定、树型实体等。
- 实体使用了自定义属性系统(托管属性框架)。这使得运行时可以不再使用反射,而是使用内置的属性管理方式,运行效率更高。同时,这些属性的 API 直接公布,更方便开发人员编写面向自己应用的框架。
- 仓库基类则实现了组合实体的添加、删除、修改,并提供了大量的默认查询。
- 领域服务是跨组合实体的业务逻辑的封装体,也是 SOA 架构的基础。
2. CodeFirst 开发模式
使用 Rafy 领域实体框架,采用 CodeFirst 开发模式,可以使得开发人员在开发过程中只关心领域实体的关系、属性,而不需要关心数据库结构的变化。
- 在开发过程中,只需要配置好数据库连接,建库、建表、建字段都会由 Rafy 完成。
- 实体结构上的变化:类型、属性、关系,都会由 Rafy 自动同步到数据库上。
- 相对于传统的三层应用程序,在实体中添加、删除一个字段,开发人员不再需要修改应用程序的数据库、DAL、BLL代码,而由框架自动 同步,大大提高了开发效率。
3. 多数据库支持
Rafy 领域实体框架支持把同一份实体代码映射到多种数据库。目前已经支持了
- SqlServer 2005-2012
- Oracle10
- 以及文件型数据库 SQLCE4
- 其它数据库的支持也在研发中
4. 支持部署为单机、分布式
- 使用 Rafy 编写的实体、服务,原生支持分布式部署。
- Rafy 基于自定义的托管属性框架,在对实体进行序列化时,不会传输实体中默认的数据,提高了数据传输的效率。
5. 零配置
Rafy 框架的快速开发思想之一是支持默认值,尽量多用约定、少使用配置。在必要时,仅需非常少的配置即可达到运行时的灵活变化。
框架的使用对开发人员要求非常简单,默认情况下基本不需要作任何配置。这样提高了开发的效率。
6. 稳定、质量有保障
领域实体框架的代码行有 4 万多行。为了保证框架质量,我们为框架编写了 200 多个单元测试,以测试框架的各个功能。
优势
与 EF、NH 等传统 ORM 框架相比,使用 Rafy 领域实体框架的优势在于:
传统 ORM 只是为了解决面向对象与关系数据库的映射,而 Rafy 解决的是领域实体与关系数据库的映射。
传统 ORM 只做数据处理,开发人员不得不继续考虑很多其它的问题,例如分层架构、分布式传输、远程懒加载、界面数据绑定等功能;而 Rafy 则提供了一体化解决方案,包括:仓库设计、分布式设计、托管属性设计、服务设计、界面绑定设计等。
发布内容
本次发布,只包含 Rafy 框架中的领域实体框架及相关文档,不包含“界面自动生成”等其它组件。
- 发布包地址:http://t.cn/zRyIPvd。
- QQ群: QQ 群方便大家日常对 Rafy 技术交流,欢迎加入。
- Rafy 框架小组:http://home.cnblogs.com/group/103240/。小组可讨论 Rafy 相关的任何话题,提出的问题会被优先解决。(刚建立,活跃者可申请管理员)。
- 关于源码:一直采用开源发布,效果并不明显,很多人只是把代码下载了就不管了。以后不再开源,但是依然可以免费使用。期望学习框架设计的同学,可以下载旧版本的代码。
- 更名:框架名字变更为 Rafy [rɑ:fi]。
框架发布历史
- 200909:发布了 1.0 版本,《信息系统开发平台openexpressapp 1.0发布》。
- 201104:发布快速开发视频:《OEA 框架演示 - 快速原型的开发》。
- 201203:发布了 2.9 版本,《OEA框架 2.9 Pre-Alpha 源码公布》,并创建了 QQ 技术交流群,群号:175227630。
- 201310:更名为 Rafy、发布领域实体框架 2.22.2067 版本、帮助文档 1.0、建立“Rafy 框架”小组。
关于作者
自从OEA1.0之后,OEA由胡庆访来主导开发,本篇文字也是基于他发布的blog更改而成,如果你支持OEA,欢迎大家继续支持Rafy以及作者胡庆访。
领域实体框架Rafy2 发布了的更多相关文章
- 福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!
距离“上次框架完整发布”已经过去了一年半了,应群中的朋友要求,决定在国庆放假之际,把最新的框架发布出来,并把帮助文档整理出来,这样可以方便大家快速上手. 发布内容 注意,本次发布,只包含 Rafy ...
- Rafy 领域实体框架 - 公司内部培训视频
本月给公司内部一个项目做架构重构,其中使用到了 Rafy 框架.所以我培训了 Rafy 领域实体框架的使用方法,过程中录制了视频,方便其他同事查看.现在把视频放到园里来分享下,有兴趣的朋友可以看看,有 ...
- Rafy 领域实体框架示例(1) - 转换传统三层应用程序
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 领域实体框架 - 树型实体功能(自关联表)
在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解. 场景 在开发数据库应用程序时,往往会遇到自关联表的场景.例如,分类信息.组织架构中的部门.文件夹信息等,都 ...
- Rafy 领域实体框架简介
按照最新的功能,更新了最新版的<Rafy 领域实体框架的介绍>,内容如下: 本文包含以下章节: 简介 特点 优势 简介 Rafy 领域实体框架是一个轻量级 ORM 框架. 与一般的 ORM ...
随机推荐
- Android中Parcelable接口的使用
在做开发的过程中,序列化是非常常见的.比如要将对象保存本地磁盘或者在网络上传输等.实现序列化有两种方式,一种是实现Serializable接口,第二种是实现Parcelable. Serializab ...
- Java中long和Long有什么区别 (转载)
“Long is a class. long is a primitive. That means Long can be null, where long can't. Long can go an ...
- CMD command
过滤字符串查找:netstat -aon|findstr "80"
- AngularJS指令嵌套时link函数执行顺序的问题
今天研究指令嵌套时,发现子指令的link函数先于父指令的link函数执行. 这样和预想的顺序不一样. 也就是说,如果子指令的某个scope变量依赖于父指令传来的参数时,可能一直是undefinded比 ...
- 成功在神舟K650c-i7 d2(i7-4700MQ、HM87)上装好了Windows XP
成功在神舟K650c-i7 d2(i7-4700MQ.HM87)上装好了Windows XP 本来已经在K650c上装好了Windows7.Windows8双系统,奈何某些旧软件只能在Windows ...
- eclipse下开发winform的插件WindowBuilder
可以开发swt,xwt等c/s应用 WindowBuilder插件可以在MarketPlace下载到,Help->Eclipse MarketPlace 可视化开发界面:
- <后会无期>经典影评
先说明是转载,任何不同意见请对原作者表达,楼主不作任何回应,楼主影商极低,楼主觉得这二十几年来看的最好的电影是<一代宗师>,楼主只是觉得这篇影评精彩才发布上来让更多的人看到.原作者意见和楼 ...
- apache 80端口部属多站点配置
1.在httpd.conf文件里启用虚拟主机功能,即去掉下面配置项前面的# #LoadModule vhost_alias_module modules/mod_vhost_alias.so 2..在 ...
- GOOGLE不能访问的解决方法
1VPN gate 2自 由 门 3修改Windows\System32\drivers\etc hosts (复制https://github.com/txthinking/google-hosts ...
- 使用nginx-http-concat优化网站响应
前言: 我们在访问淘宝的时候,会看到代码中的js和css文件是通过一次请求或得的,我们知道浏览器一次请求只能并发访问数个资源,这样的处理错输在网络传输层面可以大大节省时间,这里使用的技术就是把css. ...