昨天介紹了數據庫的配置,今天繼續介紹系統的初始化功能;針對系統初始化在開發中也是很重要的一部分,它可以提前將相關數據提前自動初始化到系統中,同時也可以為上線測試提供方便,可以很方便進行系統測試演練,防止人為處理帶來的隱患並且可以節省大量部署時間。
本框架中系統初始化包含數據庫(包括默認庫和自定義庫)初始化、數據表初始化、系統數據初始化以及自定義數據初始化,在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 == 0; } 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,今天初始化的部分就介紹到此地,下次給大家介紹下系統通用類,祝大家生活愉快!