Rookey.Frame之系统初始化
昨天介绍了数据库的配置,今天继续介绍系统的初始化功能;针对系统初始化在开发中也是很重要的一部分,它可以提前将相关数据提前自动初始化到系统中,同时也可以为上线测试提供方便,可以很方便进行系统测试演练,防止人为处理带来的隐患并且可以节省大量部署时间。
本框架中系统初始化包含数据库(包括默认库和自定义库)初始化、数据表初始化、系统数据初始化以及自定义数据初始化,在Rookey.Frame.Controllers\UserController.cs用户控制器中,在登录页面Login(Action)中,系统会自行判断当前系统是否需要初始化,判断条件是判断用户表中是否存在用户数据,同时会判断数据库是否存在,如果数据库不存在则先初始化数据库,判断初始化代码如下:
/// <summary>
/// 是否需要初始化
/// </summary>
/// <returns></returns>
public static bool IsNeedInit()
{
try
{
DbLinkArgs dbLinkArgs = ModelConfigHelper.GetLocalDbLinkArgs();
if (dbLinkArgs == null) return true;
if (!SystemOperate.DbIsExists(dbLinkArgs))
{
//向各数据库注册存储过程
SystemOperate.RegStoredProcedure();
//在当前数据库中自动注册外部链接数据库服务器
SystemOperate.RegCrossDbServer();
}
string errMsg = string.Empty;
long count = CommonOperate.Count<Sys_User>(out errMsg, false);
return count == ;
}
catch
{
return true;
}
}
在判断需要初始化后,系统会依次进行数据表初始化、字段修复(目前只支持字段增加)、模块数据初始化、列表信息及列表字段初始化、列表按钮初始化、表单信息及表单字段初始化、图标初始化、添加管理员角色和用户、初始化系统菜单、调用自定义初始化

Rookey.Frame框架是基于业务无的框架,可以很容易将其应用到新项目中,只需要将相关组件添加到引用即可,详见Rookey.Demo,很多时候在一个稍大点的公司系统也很多,但是系统复用性非常低,重复造轮子的代码到处都是,一个系统中已经实现了但由于耦合性太强,另外一个系统不得不自己再写一套相关的逻辑处理,能共用的组件很少,有的一般也是采用服务或接口方式提供,本人从事信息化以来所在的公司很少有公司有一套公共的系统框架可复用,所以写此框架的目的也是基于此,Rookey.Frame做为一套基础框架,可以在其上衍生出自己的业务框架,这样业务框架也可以达到复用的目的,公司各个系统在此基础上可以进行快速开发,节省人力开发成本、时间成本,当然本框架也存在很多问题,我也会尽全力将其完善。说了这么多其他是想说自定义初始化的部分,当系统框架稳定后应该是一套独立的组件,开发新项目时直接引用即可,这时候框架初始化的时候同时初始化当前项目数据;在Rookey.Frame.Operate.Base\InitFactory.cs基类中提供了一个自定义初始化的抽象方法
/// <summary>
/// 自定义初始化,包括菜单、模块、字段、字典等数据初始化
/// </summary>
public abstract void CustomerInit();
在各自的项目中只要继承框架中InitFactory类重写此方法即可初始化即可。
以下为Rookey.Demo中自定义初始化代码:
/// <summary>
/// 自定义初始化
/// </summary>
public class InitOperate : InitFactory
{
/// <summary>
/// 自定义初始化
/// </summary>
public override void CustomerInit()
{
string errMsg = string.Empty;
CommonOperate.DeleteRecordsByExpression<Sys_Menu>(x => x.Name == "行政管理" || x.Name == "礼品申请", out errMsg);
Sys_Menu XZMenu = new Sys_Menu() { Name = "行政管理", Display = "行政管理", IsLeaf = false, IsValid = true };
Guid xZMenuId = CommonOperate.OperateRecord<Sys_Menu>(XZMenu, Frame.Operate.Base.OperateHandle.ModelRecordOperateType.Add, out errMsg);
Guid detpModuleId = SystemOperate.GetModuleIdByName("礼品申请");
if (xZMenuId!=Guid.Empty)
{
List<Sys_Menu> list = new List<Sys_Menu>();
list.Add(new Sys_Menu() { Name = "礼品申请", Display = "礼品申请", ParentId = xZMenuId, Sys_ModuleId = detpModuleId, IsLeaf = true, IsValid = true });
CommonOperate.OperateRecords<Sys_Menu>(list, Frame.Operate.Base.OperateHandle.ModelRecordOperateType.Add, out errMsg);
}
}
}
OK,今天初始化的部分就介绍到此地,下次给大家介绍下系统通用类,祝大家生活愉快!
Rookey.Frame之系统初始化的更多相关文章
- Rookey.Frame之实体类
上周跟大家分享了Rookey.Frame框架的初始化功能,今天继续给大家介绍实体类的设计. 先看下下面菜单实体示例代码: using Rookey.Frame.EntityBase; using Ro ...
- Rookey.Frame v1.0快速开发平台-整体介绍
Rookey.Frame v1.0是一套基于.NET MVC的极速开发框架,支持简单逻辑模块零代码编程.支持二次开发,具有高扩展性.高复用性.高伸缩性. 框架特点 (1)简单逻辑模块实现零代码编程,通 ...
- Rookey.Frame之数据库及缓存配置
上一篇中讨论了Rookey.Frame框架菜单配置功能,这一节我们继续学习Rookey.Frame框架的数据库连接配置. 之前介绍了Rookey.Frame框架支持跨多数据库,并且支持读写分离,不过目 ...
- Rookey.Frame v1.0快速开发平台-用户登录
上一次介绍的了Rookey.Frame v1.0快速开发平台的整体功能,接下来会对各个功能点进行解析说明,今天给大家介绍下系统登录功能. 用户登录 系统中基本上所有功能页面都是从后台代码拼接后返回的, ...
- Rookey.Frame企业级极速开发框架
项目详细介绍 Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性 ...
- Rookey.Frame企业级快速开发框架开源了
Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性:应广大网友要 ...
- Rookey.Frame之菜单设置
在上一篇博文 Rookey.Frame企业级快速开发框架开源了 中我们介绍了Rookey.Frame极速开发框架的最新更新及开源介绍,后面慢慢介绍该框架的使用方法,本人文笔不好,写得不够好的地方请大家 ...
- centos7 系统初始化脚本
现在自己的本地虚拟机系统,直接安装的是centos7.2 mini版,安装完成发现好多东西都没有安装,所以写了一个简单的系统初始化脚本,让自己可以省一些力气,哈哈 人懒主要是. 下面贴出写的脚本,脚本 ...
- ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题
想要实现的功能:SSH环境下,数据层都交由Spring管理:在服务启动时,将数据库中的一些数据加载到ServletContext中缓存起来. 系统初始化类需要实现两个接口: ServletContex ...
随机推荐
- Hadoop生态圈-Hbase过滤器(Filter)
Hadoop生态圈-Hbase过滤器(Filter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- java基础-BigDecimal类常用方法介绍
java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...
- bzoj千题计划167:bzoj3527: [Zjoi2014]力
http://www.lydsy.com/JudgeOnline/problem.php?id=3527 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 以n=4为例: ...
- 51 Free Data Science Books
51 Free Data Science Books A great collection of free data science books covering a wide range of to ...
- 2016-2017-20155329 《Java程序设计》第7周学习总结
学号 2016-2017-20155329 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治标准时间(GMT时间) 世界时(UT) 国际原子时(TAI) 世界协调 ...
- 20145226夏艺华 《Java程序设计》第6周学习总结
教材学习内容总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解Reader/Writer继承架构 会使用装饰类 会使用多线程进行并发程序设计 第十章 输 ...
- Concat层解析
Concat层的作用就是将两个及以上的特征图按照在channel或num维度上进行拼接,并没有eltwise层的运算操作,举个例子,如果说是在channel维度上进行拼接conv_9和deconv_9 ...
- 如何更优雅地写Django REST framework
DRF(Django REST framework)是一个高度封装的框架,这导致想完成一件事情可以通过重写父类函数的方式从DRF的各个层次来写,都能够实现目的. 比如写视图函数,可以用继承APIVie ...
- 初时Python博大精深
Python是解释型语言 编译型vs解释型 编译型优点:编译器一般会有预编译的过程对代码进行优化.因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高.可以脱离语言环境独立运行.缺点:编 ...
- A - ACM Computer Factory(网络流)
题目链接:https://cn.vjudge.net/contest/68128#problem/A 反思:注意拆点,否则的话节点就没用了,还有注意源点和汇点的赋值. AC代码: #include&l ...