針對不少表結構如今大部分人都採用了Hibernate技術,Hibernate是一個開放源代碼的對象關係映射框架,它對數據庫訪問層進行了很是輕量級的對象封裝,使得程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。但這樣作的問題是增長了程序的運行成本,不利於定製查詢和複雜查詢的優化及數據庫優化。程序員
所以咱們採用的辦法是創建獨立的MVC架構,即創建固定的Model和操做控制Operator以及數據庫訪問接口。數據庫訪問採用觸發器設計模式,靈活了數據庫的配置和數據庫轉換的使用,經過這一技術,數據庫既能夠是SQL Server的,也能夠是Oracle,甚至是Access數據庫均可以。數據庫
首先咱們先定義幾個namespace,每一model的命名空間是以VonPortal.Web.Models命名。每個操做控制類採用VonPortal.Web.Operators命名,每個數據庫接口採用VonPortal.Web.Data命名。編程
首先咱們看個事例:c#
//角色信息(PTL_Role) #region "角色信息信息類聲明" namespace VonPortal.Web.Models { /// <summary>角色信息 信息類</summary> public class RoleInfo : IRole<int> { public int Id { get { return ID; } } public string Name { get { return RoleName; } set { RoleName = value; } } #region "Constructors" /// <summary> /// 構造函數 /// </summary> public RoleInfo() { } /// <summary> /// 含初始化構造函數 /// </summary> /// <param name="ID">序號</param> /// <param name="GroupName">組名稱</param> /// <param name="RoleName">角色名稱</param> /// <param name="SiteIdx">站點序號</param> /// <param name="ParentIdx">上級節點</param> /// <param name="InheritKind">繼承關係</param> /// <param name="Description">角色說明</param> public RoleInfo(int ID, string GroupName, string RoleName, int SiteIdx, int ParentIdx, int InheritKind, string Description) { this.ID = ID; this.GroupName = GroupName; this.RoleName = RoleName; this.SiteIdx = SiteIdx; this.ParentIdx = ParentIdx; this.InheritKind = InheritKind; this.Description = Description; } #endregion #region "Public Properties" /// <summary>序號</summary> [Required] [Display(Name = "序號")] public int ID { get; set; } /// <summary>組名稱</summary> [Display(Name = "組名稱")] public string GroupName { get; set; } /// <summary>角色名稱</summary> [Display(Name = "角色名稱")] public string RoleName { get; set; } /// <summary>站點序號</summary> [Required] [Display(Name = "站點序號")] public int SiteIdx { get; set; } /// <summary>上級節點</summary> [Required] [Display(Name = "上級節點")] public int ParentIdx { get; set; } /// <summary>繼承關係</summary> [Display(Name = "繼承關係")] public int InheritKind { get; set; } /// <summary>角色說明</summary> [Display(Name = "角色說明")] public string Description { get; set; } #endregion } } #endregion #region "角色信息信息基礎控制類聲明" namespace VonPortal.Web.Operators { /// <summary>角色信息 控制類</summary> public class RoleCtrl { private RoleDataProvider dataProvider = null; /// <summary> /// 啓動數據庫事務 /// </summary> /// <returns></returns> public IDbTransaction BeginTrans() { dataProvider = RoleDataProvider.CreateProvider(); return dataProvider.DBBeginTrans(); } /// <summary> /// 含數據庫事務的構造函數 /// </summary> /// <param name="DBTrans"></param> public RoleCtrl(IDbTransaction DBTrans) { if (DBTrans == null) dataProvider = RoleDataProvider.Instance(); else { dataProvider = RoleDataProvider.CreateProvider(); dataProvider.DBTrans = DBTrans; } } //Read data and write to RoleInfo class private void setInfoValue(IDataReader reader, RoleInfo info) { info.ID = reader.GetInt32(0); //序號 info.GroupName = reader.GetString(1); //組名稱 info.RoleName = reader.GetString(2); //角色名稱 info.SiteIdx = reader.GetInt32(3); //站點序號 info.ParentIdx = reader.GetInt32(4); //上級節點 info.InheritKind = reader.GetInt32(5); //繼承關係 info.Description = reader.GetString(6); //角色說明 } /// <summary>檢驗Role信息</summary> public string Check(RoleInfo info) { string errInfo = ""; return errInfo; } /// <summary> /// 根據主鍵 PK_Role 提取信息 /// </summary> /// <param name="ID">序號</param> public RoleInfo GetByRole(int ID) { IDataReader reader = dataProvider.GetByRole(ID); if (!reader.Read()) { reader.Close(); return null; } RoleInfo info = new RoleInfo(); setInfoValue(reader, info); reader.Close(); return info; } /// <summary>根據主鍵 IDX_Role_SiteIdx 提取信息</summary> /// <param name="SiteIdx">站點序號</param> public List<RoleInfo> ListByRole_SiteIdx(int SiteIdx, string GroupName) { List<RoleInfo> list = new List<RoleInfo>(); IDataReader reader = dataProvider.ListByRole_SiteIdx(SiteIdx, GroupName); while (reader.Read()) { RoleInfo info = new RoleInfo(); setInfoValue(reader, info); list.Add(info); } reader.Close(); return list; } public List<string> ListGroupName(int SiteIdx) { List<string> list = new List<string>(); IDataReader reader = dataProvider.ListGroupName(SiteIdx); while (reader.Read()) { list.Add(reader.GetString(0)); } reader.Close(); return list; } /// <summary>根據主鍵 IDX_Role_Parent 提取信息</summary> /// <param name="ParentIdx">上級節點</param> public List<RoleInfo> ListByRole_Parent(int SiteIdx, int ParentIdx) { List<RoleInfo> list = new List<RoleInfo>(); IDataReader reader = dataProvider.ListByRole_Parent(SiteIdx, ParentIdx); while (reader.Read()) { RoleInfo info = new RoleInfo(); setInfoValue(reader, info); list.Add(info); } reader.Close(); return list; } /// <summary>保存Role信息</summary> ///<param name="info">信息類</param> public bool Save(RoleInfo info) { info.ID = dataProvider.Save(info.ID, info.GroupName, info.RoleName, info.SiteIdx, info.ParentIdx, info.InheritKind, info.Description); return info.ID > 0; } /// <summary>添加Role信息</summary> ///<param name="info">信息類</param> public int Add(RoleInfo info) { info.ID = dataProvider.Add(info.GroupName, info.RoleName, info.SiteIdx, info.ParentIdx, info.InheritKind, info.Description); return info.ID; } /// <summary>修改Role信息</summary> ///<param name="info">信息類</param> public bool Edit(RoleInfo info) { return dataProvider.Edit(info.ID, info.GroupName, info.RoleName, info.SiteIdx, info.ParentIdx, info.InheritKind, info.Description) > 0; } /// <summary>根據PK_Role刪除Role信息</summary> /// <param name="ID">序號</param> public int Del(int ID) { return dataProvider.Del(ID); } } } #endregion #region "角色信息信息操做控制類聲明" namespace VonPortal.Web.Tasks { /// <summary>角色信息 控制類</summary> public class RoleTask : RoleCtrl { /// <summary>含數據庫事務的構造函數</summary> public RoleTask(IDbTransaction DBTrans) : base(DBTrans) { } /// <summary> /// 根據主鍵 PK_Role 提取信息 /// </summary> /// <param name="ID">序號</param> public new Task<RoleInfo> GetByRole(int ID) { return Task.Run(() => { return base.GetByRole(ID); }); } /// <summary>根據主鍵 IDX_Role_SiteIdx 提取信息</summary> /// <param name="SiteIdx">站點序號</param> public new Task<List<RoleInfo>> ListByRole_SiteIdx(int SiteIdx, string GroupName) { return Task.Run(() => { return base.ListByRole_SiteIdx(SiteIdx, GroupName); }); } /// <summary>根據主鍵 IDX_Role_Parent 提取信息</summary> /// <param name="ParentIdx">上級節點</param> public new Task<List<RoleInfo>> ListByRole_Parent(int SiteIdx, int ParentIdx) { return Task.Run(() => { return base.ListByRole_Parent(SiteIdx, ParentIdx); }); } /// <summary>保存Role信息</summary> ///<param name="info">信息類</param> public new Task<bool> Save(RoleInfo info) { return Task.Run(() => { return base.Save(info); }); } /// <summary>添加Role信息</summary> ///<param name="info">信息類</param> public new Task<int> Add(RoleInfo info) { return Task.Run(() => { return base.Add(info); }); } /// <summary>修改Role信息</summary> ///<param name="info">信息類</param> public new Task<bool> Edit(RoleInfo info) { return Task.Run(() => { return base.Edit(info); }); } /// <summary>根據PK_Role刪除Role信息</summary> /// <param name="ID">序號</param> public new Task<int> Del(int ID) { return Task.Run(() => { return base.Del(ID); }); } } } #endregion #region "角色信息信息數據庫訪問基類聲明" namespace VonPortal.Web.Data { /// <summary> /// 數據及操做控制層 /// <seealso cref="VonPortal.Web.Business.RoleInfo"/> /// <seealso cref="VonPortal.Web.Business.RoleCtrl"/> /// </summary> public abstract class RoleDataProvider : DataProvider { #region Shared/Static Methods // singleton reference to the instantiated object private static RoleDataProvider objProvider = null; // constructor static RoleDataProvider() { objProvider = CreateProvider(); } // dynamically create provider public static RoleDataProvider CreateProvider() { return (RoleDataProvider)VonPortal.Web.Reflection.CreateDataProvider("ptl", "VonPortal", "VonPortal.Web.Data.RoleDataProvider"); } /// <summary> /// The instance of RoleDataProvider with databse transaction. /// </summary> /// <returns>return the provider</returns> public static RoleDataProvider Instance() { if (objProvider == null) objProvider = CreateProvider(); return objProvider; } #endregion #region "TRole Abstract Methods" /// <summary>根據主鍵 PK_Role 提取信息</summary> public abstract IDataReader GetByRole(int ID); /// <summary>提取角色組信息</summary> public abstract IDataReader ListGroupName(int SiteIdx); /// <summary>根據主鍵 IDX_Role_SiteIdx 提取信息</summary> public abstract IDataReader ListByRole_SiteIdx(int SiteIdx, string GroupName); /// <summary>根據主鍵 IDX_Role_Parent 提取信息</summary> public abstract IDataReader ListByRole_Parent(int SiteIdx, int ParentIdx); /// <summary>保存Role信息</summary> public abstract int Save(int ID, string GroupName, string RoleName, int SiteIdx, int ParentIdx, int InheritKind, string Description); /// <summary>添加Role信息</summary> public abstract int Add(string GroupName, string RoleName, int SiteIdx, int ParentIdx, int InheritKind, string Description); /// <summary>修改Role信息</summary> public abstract int Edit(int ID, string GroupName, string RoleName, int SiteIdx, int ParentIdx, int InheritKind, string Description); /// <summary>根據PK_Role刪除Role信息</summary> public abstract int Del(int ID); #endregion } } #endregion
在這個實例裏面,系統創建了以下三個類,分別實現了數據庫信息內容的構建,完成了操做控制類的構建,完成了數據庫訪問接口的創建。設計模式
namespace VonPortal.Web.Models { /// <summary>角色信息 信息類</summary> public class RoleInfo : IRole<int> {...} } namespace VonPortal.Web.Operators { /// <summary>角色信息 控制類</summary> public class RoleCtr {...} } namespace VonPortal.Web.Data { /// <summary> /// 數據及操做控制層 /// <seealso cref="VonPortal.Web.Business.RoleInfo"/> /// <seealso cref="VonPortal.Web.Business.RoleCtrl"/> /// </summary> public abstract class RoleDataProvider : DataProvider {...} }
DataProvider是通用數據庫訪問實例的緩存基礎類,這裏就不在詳細介紹了。
實際上以上代碼咱們能夠經過一些代碼生成工具直接生成並使用的,所以不須要花費太大的經歷和關注度,咱們只需在使用的過程當中,不斷的完善操做和控制,完成多進程的管理和操做,完成數據庫事務的管理和使用,完成更加準確的數據庫管理。緩存