關於基礎信息的結構設計

針對不少表結構如今大部分人都採用了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是通用數據庫訪問實例的緩存基礎類,這裏就不在詳細介紹了。

實際上以上代碼咱們能夠經過一些代碼生成工具直接生成並使用的,所以不須要花費太大的經歷和關注度,咱們只需在使用的過程當中,不斷的完善操做和控制,完成多進程的管理和操做,完成數據庫事務的管理和使用,完成更加準確的數據庫管理。緩存

相關文章
相關標籤/搜索