文档章节

关于基础信息的结构设计

jamesvon
 jamesvon
发布于 2016/04/15 12:36
字数 1791
阅读 5
收藏 0
点赞 1
评论 0

针对很多表结构现在大部分人都采用了Hibernate技术,Hibernate是一个开放源代码的对象关系映射框架,它对数据库访问层进行了非常轻量级的对象封装,使得程序员可以随心所欲的使用对象编程思维来操纵数据库。但这样做的问题是增加了程序的运行成本,不利于定制查询和复杂查询的优化及数据库优化。

因此我们采用的办法是建立独立的MVC架构,即建立固定的Model和操作控制Operator以及数据库访问接口。数据库访问采用触发器设计模式,灵活了数据库的配置和数据库转换的使用,通过这一技术,数据库既可以是SQL Server的,也可以是Oracle,甚至是Access数据库都可以。

首先我们先定义几个namespace,每一model的命名空间是以VonPortal.Web.Models命名。每一个操作控制类采用VonPortal.Web.Operators命名,每一个数据库接口采用VonPortal.Web.Data命名。

首先我们看个事例:

//角色信息(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是通用数据库访问实例的缓存基础类,这里就不在详细介绍了。

实际上以上代码我们可以通过一些代码生成工具直接生成并使用的,因此不需要花费太大的经历和关注度,我们只需在使用的过程中,不断的完善操作和控制,完成多进程的管理和操作,完成数据库事务的管理和使用,完成更加准确的数据库管理。

© 著作权归作者所有

共有 人打赏支持
jamesvon
粉丝 3
博文 31
码字总数 47875
作品 0
河西
项目经理
SQL查询优化——数据结构设计

本文部分内容会涉及mysql,可能在其他数据库中并不适用。本章节只针对数据库结构设计做讨论,查询优化的其他内容待续。 数据库设计及使用是WEB开发程序员必备的一项基础技能,在大数据量和高...

蜗牛奔跑
2016/11/24
5
0
关于游戏服务器中缓存的设计方案的讨论

(只针对游戏服务器中的热数据)游戏服务器的缓存设计总体大概有三种类型:进程内缓存--如java的ehcahe、 进程内缓存--使用会话session Cache,通过语言的基础类型和基础的集合框架来定制 、...

石头哥哥
2014/10/31
0
0
AI领域的蝙蝠侠大战超人:LeCun与Manning如何看待神经网络中的结构设计

雷锋网 AI 科技评论按:近日,深度学习三驾马车之一的 Yann LeCun 教授与斯坦福大学 NLP 掌门人 Christopher Manning 教授共同出席了斯坦福 AI 实验室所举办的 AI 沙龙,一同讨论了关于「什么...

高云河
04/30
0
0
想当程序员,自学C语言/C加加零基础入门学习难吗

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰GG
2017/12/29
0
0
商城类小程序开发全过程(附源码)

商城类小程序是所有类别小程序中开发的热点,但其相对于其他类别的小程序,具有逻辑复杂、功能需求较大等特点,因此,对开发者具有一定的基础要求。 那我们就止步于前了吗? 当然不! 本文主...

大王12
05/02
0
0
4.自动生成代码使用说明

开源项目名称: osframe管理系统 托管地址: http://git.oschina.net/haizicq/osframe 主要技术: spring mvc、spring、hibernate、angular js、seajs、bootstrap、shiro 框架介绍: 本框架是...

王春-海子
2016/07/20
112
0
Spring Cloud Config采用数据库存储配置内容

在之前的《Spring Cloud构建微服务架构:分布式配置中心》一文中,我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息存储。这一设计巧妙的利用Git自身机制以及其他具有丰富...

程序猿DD
06/15
0
0
thinkphp的model模型的设计经验总结

关于模型;跟上篇文章thinkphp的目录结构设计经验总结写控制器一个道理;为了尽量避免改动到框架; 首先我们是要有一个BaseModel.class.php作为我们的基础model; 我会在BaseModel中定义增删...

白俊遥
2016/05/14
22
0
协作机器人研讨会- 总结(二)

申明:这篇文章初稿由武汉库柏特科技杨洪同学整理,在此发出。(多图) 上回整理的是关于协作机器人末端执行器,后来八月底在美国参加了CASE会议后,发现的确末端执行器是一个很大的问题,很多...

李淼robot
2016/10/17
0
0
数据库设计(一)——数据库设计

数据库设计(一)——数据库设计 一、数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段: A、系统需求分析阶段 B、概念结构设计阶段 C、逻辑结构设计阶段 D、物理结构设计阶段 ...

642960662
03/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

pbgo: 基于Protobuf的迷你RPC/REST框架

https://www.oschina.net/p/pbgo

chai2010
33分钟前
0
0
rsync工具介绍、常用选项以及通过ssh同步

linux下的文件同步工具 rsync rsync是非常实用的一个同步工具,可以从a机器到b机器传输一个文件,也可以备份数据,系统默认没有这个工具,要使用命令 yum install -y rsync 安装。 rsync的命...

黄昏残影
48分钟前
0
0
OSChina 周四乱弹 —— 表妹要嫁人 舅妈叮嘱……

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @哈哈哈哈哈嗝:一定要听——The Pancakes的单曲《咁咁咁》 《咁咁咁》- The Pancakes 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :...

小小编辑
今天
245
4
流利阅读笔记30-20180719待学习

重磅:让人类得老年痴呆的竟是它? Lala 2018-07-19 1.今日导读 去年奥斯卡最佳动画长片《寻梦环游记》里有一句经典台词:“比死亡更可怕的,是遗忘”。在电影中,年迈的曾祖母会重复说一样的...

aibinxiao
今天
3
0
1.16 Linux机器相互登录

Linux机器之间以密码方式互相登录 运行命令#ssh [ip address],标准命令:#ssh [username]@ip, 如果没有写用户名,则默认为系统当前登录的用户 命令#w查看系统负载,可查看到连接到该主机的...

小丑鱼00
今天
0
0
about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部