Rafy框架

什么是Rafy框架?

-------- Rafy 是一个面向企业级开发的插件化快速开发框架。

Rafy的优点是什么?

------快速开发、产品线工程、一套代码可同时生成并运行 C/S、单机版、B/S 三种应用程序。

l  Rafy框架怎么用?

Rafy User Guide : http://zgynhqf.github.io/Rafy --网页版的Rafy手册

上面这一套是我的学习思路。

Rafy笔记

下面我把自己的学习笔记贴一下。

1、         n+1 问题的原因是懒加载

遍历一个集合,集合中有n个A类,A类中又有一个B类类型的属性它被标记为延迟加载或者说懒加载。那么在遍历过程中,如果访问到这个特殊属性,就会去连接n次数据库这会导致遍历用时变长。这就是n+1问题。

解决方案:

贪婪加载。慕名思意:你要一口吃个饺子加两瓣蒜。

Rafy框架提供这一功能,实际上你根本不用担心怎么做,因为它就是一个参数,告诉框架你要同时加载的是b类中的某个属性。

2、         冗余属性 ==》数据库表中冗余字段 提升性能

传统RBAC大家都知道,那么基于这五张表查询某个用户的所有权限名如何查询呢?这是实际中存在的问题,很明显这要做很多联合查询,无论是ado.net还是ef 查询过程都不会很简单,查询速度都不会很快。怎么办?

解决方案:

我们可以把用户角色关联表修改为用户角色权限关联表

也就是说,我们把权限冗余到用户角色关联表里。然后我们就可以很轻松的、很快速的查询到某个用户的所有权限。但这会引出数据同步的问题。

Rafy框架提供了冗余属性,框架会自动维护这个冗余属性生成的数据库里的冗余字段,而且这个属性是只读的(相当于缓存其他表的列)。

3、         引用、组合

引用关系是一种常用的多对一关系。可以表示诸如:“A使用B”、“A按B分类” 等概念。注意是多对一!

引用关系分可空引用、不可空引用。

组合关系是一种一对多关系,是最常用的一种父子关系。它表示一个实体类从属于另一实体类,两个实体类组合在一起,用于表示领域中一个具体的概念。 例如,在开发过程中,常常听说的主从表、父子表、主细表,都是这种结构。

4、         大数据属性

在使用懒加载时考虑到某些属性存储的信息量会很大,而我们并不需要这一属性,可是懒加载加载的是一整个对象,那没办法只能浪费内存、浪费性能了。

解决方案:标记为大数据属性即可。实际情况有二:

读、懒加载:当需要使用内容时,框架才会从数据库中加载该属性的 值

写、按需更新:当更新数据库时,只有对大数据属性变更后,对应的 Sql 更新语句中才会更新该字段。

5、         树形实体-为了自关联

引入一个情景:

商品分类:数码、家电、手机、耳机、耳机配件

很明显,有一张商品分类表存储这些信息,数码》手机》耳机》耳机配件

那么这个层级关系如何存储呢?毫无疑问用一个Pid也就是上级id的一个标识即可。问题就产生了:上级id需要维护。

Rafy提供了树形实体这一概念,并且框架会自动维护父对象id,还提供了查询的方法。

上面是基础的领域实体,也是我个人觉得最重要的。

用Rafy读写数据

下面到了怎么读写数据了。

其实框架与vs集成,平时建的是类,安装rafy的vs插件后就可以直接创建rafy领域实体和rafy领域实体仓库了。所有的读写都要通过仓库。

通过仓库的读写就非常简单了。具体的请参考手册。

Rafy的设计

1、  orm 框架 比如code first、自动生成数据库、连接多种数据库等不再赘述了。

2、  插件化快速开发、比如幽灵插件(框架自动维护的软删除)、工作流等

3、  面向服务、领域驱动、模型驱动设计。

领域实体设计是整个系统设计的源头;基于实体,设计出相应的领域服务;然后再生成数据库;再生成界面。就可以快速地开发出完整的系统。

在Rafy中创建服务非常简单,服务就是一个壳子,把控制器/其他业务类中的方法供出去。

4、 产品线工程 好吧不太懂。。。

最后一句,请参考Rafy User Guide : http://zgynhqf.github.io/Rafy --网页版的Rafy手册。

rafy的缺点

1、         日志文件大小控制

2、         文件(或类)依赖关系不明确(最好整理文档)

3、         框架响应慢(实践出真知!!!生成数据库要二十分钟!!好吧,其实在别人电脑上可以很快。。。)

时间: 2024-10-05 03:47:13

Rafy框架的相关文章

Rafy 框架 - 使用 SqlTree 查询

本文介绍如何使用 Rafy 框架中的 Sql Tree 查询: 除了开发者常用的 Linq 查询,Rafy 框架还提供了 Sql 语法树的方式来进行查询. 这种查询方式下,开发者不需要直接编写真正的 Sql 语句,而是转而使用一套中间 Sql 语法树对象.这隔离了与具体数据库的耦合,使得开发者编写的查询可以跨越多种不同的数据库运行,甚至可以在非关系型数据库中运行.同时,框架还结合托管属性,提供了方便开发者使用的 API,并尽量保持与传统 Sql 相近的语法,使得开发者可以快速理解并编写. 本文包

Rafy 框架 - 领域模型设计器(建模工具)设计方案

去年4月,我们为 Rafy 框架添加了领域模型设计器组件.时隔一年,谨以本文,简要说明该领域模型设计器的设计思想. 设计目标 Rafy 实体框架中以领域驱动设计作为指导思想.所以在开发时,以领域建模为首要任务.为此,我们为它开发了领域模型设计器.开发人员可以在设计器中,设计相应的领域模型,查看现有代码对应的领域模型. 我们为这个设计器制定了以下功能: 外部简单设计器:也就是设计器可以部署为一个可以独立运行的软件.该软件可以打开领域模型的设计图,方便团队中的非开发人员角色查看.同样,这个软件最好也

使用 NuGet 下载最新的 Rafy 框架及文档

为了让开发者更方便地使用 Rafy 领域实体框架,本月,我们已经把最新版本的 Rafy 框架程序集发布到了 nuget.org 上,同时,还把 RafySDK 的最新版本发布到了 VisualStudio 插件仓库中. 以下说明如何下载.更新最新的 SDK 及程序集. 下载.更新最新的 RafySDK 在 VisualStudio 中打开扩展管理器(Tools -> Extensions and Updates),选择在线项目,并搜索 “Rafy” 安装即可.如下图: 同样,只需要在扩展管理器中

Rafy 框架 - 幽灵插件(假删除)

  Rafy 框架又添新成员:幽灵插件.本文将解释该插件的场景.使用方法.原理.   场景 在开发各类数据库应用系统时,往往需要在删除数据时不是真正地删除数据,而只是把数据标识为'已删除'状态.这些数据在业务逻辑上是已经完全删除.不可用的数据,但是不能在数据库中真正的把它们删除,而是需要永久保留这些历史数据.即开发人员常说的'假删除'功能. 这种需求往往是系统级的.往往不是针对某一张表,而很可能是针对系统中的所有表都需要实现'假删除'功能.   使用方法 由于这种需求比较常见,所以我们决定专门为

Rafy 框架 - 流水号插件

Rafy 框架又添新成员:流水号插件.本文将解释 Rafy 框架中的流水插件的场景.使用方法. 场景 在开发各类数据库应用系统时,往往需要生成从一开始的流水号,有时还需要按月或者按日进行独立生成,如下面的格式:2016031800000001.2016031800000002--. 设计本插件用于生成上述相应格式的编号. 使用方法 添加插件 1.通过 Nuget Package Manager 搜索并安装 Rafy.SerialNumber 插件. 2.在 DomainApp 中添加该插件:同时

快速开发~Rafy框架的初步认识

当我们开始使用EF的同时,是不是就会更好的认识了其他的ORM框架,最近接触了Rafy的使用,感觉还是蛮有兴趣去学习的,虽然最初的我到现在看的并不深入,但是我个人感觉还是可以简单地做一些总结的啦,或许语言不多,但是更多的想总结下它的使用,之前没接触的友友也可以简单地认识一下啦,嘿嘿. 要是想使用Rafy框架,其实很简单的,只需要打开VS然后在工具栏中选择扩展和更新然后搜索Rafy.SDK安装即可. Rafy框架的简单使用 说起来使用,其实还是很简单的入门的,当我们建立完我们的解决方案后我们就新建一

Rafy 框架 - 为数据库生成注释

当开发者使用 CodeFirst 开发模式,编写了大量的实体类,在代码中编写了完整的类型注释和属性注释,并自动生成数据库后,往往需要把实体类型和实体属性上的注释同时生成到对应的数据库表及字段上.这样,即方便在查看数据库时能清晰地看到每一个表及字段的含义,也方便使用一些第三方的工具(如 PowerDesigner 等)为数据库生成较为全面的文档. 使用方法 在为数据库生成注释之前,需要保证数据库已经全部生成成功(即和实体保持一致).否则更新字段的注释时,可能因为字段不存在而导致执行失败. 需要在编

Rafy 框架 - 执行SQL或存储过程

有时候,开发者不想通过实体来操作数据库,而是希望通过 SQL 语句或存储过程来直接访问数据库.Rafy 也提供了一组 API 来方便实现这类需求. IDbAccesser 接口 为了尽量屏蔽各数据库中 SQL 语句参数的不同标识,同时也为了使开发者更简单地实现参数化的查询.Rafy 中提供了 IDbAccesser 接口来方便开发者使用.接口定义如下: /// <summary> /// A db accesser which can use formatted sql to communic

Rafy 框架 - 大批量导入实体

某些场景下,开发者希望能够大批量地把实体的数据导入到数据库中.虽然使用实体仓库保存实体列表非常方便,但是其内部实现机制是一条一条的保存到数据库,当实体的个数较多时,效率就会很低.所以 Rafy 设计了批量导入插件程序,其内部使用 ADO.NET 及 ODP.NET 中的批量导入机制来把大量数据一次性导入到数据库中. 使用方法 步骤 由于批量导入功能是一个额外的程序集,所以在使用该功能时,需要先使用 NuGet 引用最新版本的 Rafy.Domain.ORM.BatchSubmit 程序集. 如果