Rafy框架
l 什么是Rafy框架?
-------- Rafy 是一个面向企业级开发的插件化快速开发框架。
l 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中创建服务非常简单,请参考Rafy User Guide : http://zgynhqf.github.io/Rafy --网页版的Rafy手册。
注意!
1、 sql跟踪日志文件为单文件。(有一个例子,在为客户部署的时候忘记关闭sql日志记录的功能,后面维护的时候发现已经 50多G 了)
2、 文件(或类)依赖关系不明确(最好整理文档)
3、 保存的时候是全字段保存
4、 要注意使用 事务控制级别建议(Searilzable 级别)。
Rafy框架的更多相关文章
- 使用 NuGet 下载最新的 Rafy 框架及文档
为了让开发者更方便地使用 Rafy 领域实体框架,本月,我们已经把最新版本的 Rafy 框架程序集发布到了 nuget.org 上,同时,还把 RafySDK 的最新版本发布到了 VisualStud ...
- Rafy 框架 - 通用查询条件(CommonQueryCriteria)
在应用开发过程中,有 80% 的场景下,开发者所需要的实体查询,查询条件中其实都是一些简单的属性匹配,又或是一些属性匹配的简单组合.Rafy 为这样的场景提供了更为方便使用的 API:CommonQu ...
- 一位同事对 Rafy 框架的一些建议及我的回复
下面是一位同事对当前的产品开发框架提出的一些建议,以及我的回复.我觉得一些问题提得有一定的代表性,在征得本人同意后,将本邮件发布在博客中. 同时,也非常希望对框架.产品有好的建议的小伙伴,都可以给我发 ...
- Rafy 框架 - 使用 SqlTree 查询
本文介绍如何使用 Rafy 框架中的 Sql Tree 查询: 除了开发者常用的 Linq 查询,Rafy 框架还提供了 Sql 语法树的方式来进行查询. 这种查询方式下,开发者不需要直接编写真正的 ...
- Rafy 框架 - 流水号插件
Rafy 框架又添新成员:流水号插件.本文将解释 Rafy 框架中的流水插件的场景.使用方法. 场景 在开发各类数据库应用系统时,往往需要生成从一开始的流水号,有时还需要按月或者按日进行独立生成,如下 ...
- Rafy 框架 - 幽灵插件(假删除)
Rafy 框架又添新成员:幽灵插件.本文将解释该插件的场景.使用方法.原理. 场景 在开发各类数据库应用系统时,往往需要在删除数据时不是真正地删除数据,而只是把数据标识为'已删除'状态.这些数 ...
- 快速开发~Rafy框架的初步认识
当我们开始使用EF的同时,是不是就会更好的认识了其他的ORM框架,最近接触了Rafy的使用,感觉还是蛮有兴趣去学习的,虽然最初的我到现在看的并不深入,但是我个人感觉还是可以简单地做一些总结的啦,或许语 ...
- Rafy 框架 - 时间戳插件
本文将解释 Rafy 框架中的时间戳插件的场景.使用方法.原理. 场景 在开发各类数据库应用系统时,业务领域实体往往需要包含"创建时间"."最后更新时间".&q ...
- Rafy 框架 - 实体支持只更新部分变更的字段
Rafy 快一两年没有大的更新了.并不是这个框架没人维护了.相反,主要是因为自己的项目.以及公司在使用的项目,都已经比较稳定了,也没有新的功能添加.但是最近因为外面使用了 Rafy 的几个公司,找到我 ...
随机推荐
- Oracle存储过程编译卡死的解决方法
转自: https://www.cnblogs.com/liang-ling/p/5395249.html 解决方法如下: 1:查V$DB_OBJECT_CACHE SELECT * FROM V$D ...
- SpringMVC Controller介绍及常见注解
一.简介 在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返 ...
- 一篇你看了就懂的DNS详解
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住IP. 通过域名,最终得到该域名对应的IP地址 ...
- laravel 赋值
字符串形式: //C层 $res = '123456'; view( ' index/index ' , [ 'v' => $value ] ) ; //V层 原样输出: {$v} 操作: {m ...
- Winform下判断文件和文件夹是否存在
//选择文件夹 FolderBrowserDialog dia = new FolderBrowserDialog(); if (dia.ShowDialog() == System.Windows. ...
- AngularJS学习笔记(二)MVVM
什么是MVVM MVVM模式是Model-View-ViewMode模式的简称. 由视图(View).视图模型(ViewModel).模型(Model)三部分组成,通过这三部分实现UI逻辑.呈现逻辑和 ...
- WPF备忘录(3)如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter
一.如何从 Datagrid 中获得单元格的内容 DataGrid 属于一种 ItemsControl, 因此,它有 Items 属性并且用ItemContainer 封装它的 items. 但是,W ...
- Maven为不同环境配置打包
在开发过程中经常要遇到为不同的环境打包,这里面最主要的问题在于,不同环境的配置是不一样的,如果为不同环境打包每次都手工修改配置,那不但工作量大,而且很容易出错.如果用ant的话,用变量加上replac ...
- js 前端分页空间控件
现在web注重用户体验与交互性,ajax 提交数据的方式很早就流行了,它能够在不刷新网页的情况下局部刷新数据.前端分页多是用ajax请求数据(其他方式也有比如手动构造表单模拟提交事件等).通过js将查 ...
- JavaSE Set集合
明确Set集合接口的特点. java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collec ...