zoukankan      html  css  js  c++  java
  • 系统基础模块之通用字典项目管理

    我们在很多系统中,往往需要维护很多字典项目,一般的字典项目包含有一个大类名称、字典项目名称、字典值、排序、编辑者、编辑时间等字段,这些内容往往大同小异,如在车辆管理中,我们可能需要维护:车辆类型、车辆品牌、车辆用途、路途类别、用车评价、车辆状态等等信息,这些是很简单的数据,用来给业务功能使用的,是一个下拉列表形的数据,如果我们为每个这样的简单类型都创建一个表的话,那么有以下坏处:

     

    1)  如果业务模块很多,就会产生很多这样的表,看起来不雅,维护也不方便,增加工作量。

    2)  会产生很多页面代码(你需要维护界面内容展示和录入),也是看起来不雅,不方便维护,增加工作量。

    3)   代码中调用处理也不好,记不住哪个是具体的字典信息了,太多。

    以上总结一句话,就是做重复工作,就算有一键生成代码的工具,也是不好的。

    如果采用一个公用的字典管理模块能够解决以上问题,那么整个世界就清净了,一句话,简单。

    好,那我们看看如何实现以上功能的。首先看看表的设计。


    字典大类DictType表(就是按业务分类的意思,如上面的车辆管理是一类,可能还有飞机管理之类的,呵呵)

     

     字典数据项目DictData表,就是指定业务下有多少个字典项目,每个项目下面的名称和对应的值是什么,排序是什么等信息。

     

    对这两个表生成相应的处理页面如下所示。(第一个图是大类管理、当点击字典类型名称进行指定类型的字典项目管理,也就是下面第二个图。

     完成了这个字典大类和字典明细项目的基本信息管理后,今后只要有新的需要,之需要增加项目的大类和具体的业务字典项目即可。之前我的文章有介绍,整个平台的菜单是动态配置的,因此,我们在业务子菜单中增加相应的菜单管理具体的项目即可。


     上面我们看到,具体字典大类下的明细字典项目,我们只需要给出相应的连接即可,连接有一个TypeID就是具体的类型ID,根据这个ID,我们就知道目前的管理类别是什么了。

     

     这样页面的字典信息管理完成了,那么我们在具体的项目中如何使用它呢,看了下面的代码就会觉得很简单了。

     其实字典项目的使用无非有两个,一个是根据大类获取对应的下拉列表项目,一个根据制定的项目获取对应的字典值。如下面两个函数就是典型的应用。

            /// <summary>
            
    /// 获得选择处理人
            
    /// </summary>
            
    /// <returns>ListItem[]</returns>
            public static ListItem[] GetListItem_MaySelProc()
            {
                
    return SystemCommon.GetDictByDictType("选择处理人");
            }

            
    /// <summary>
            
    /// 转换选择处理人的名称
            
    /// </summary>
            
    /// <returns></returns>
            public static string GetMaySelProcString(string intSelectProc)
            {
                
    return BLLFactory<DictData>.Instance.GetDictName("选择处理人", intSelectProc);
            }

     具体调用的业务类部分代码如下所示:

            /// <summary>
            
    /// 根据字典类型名称获取所有该类型的字典列表集合(Key为名称,Value为值)
            
    /// </summary>
            
    /// <param name="dictType">字典类型名称</param>
            
    /// <returns></returns>
            public Dictionary<stringstring> GetDictByDictType(string dictTypeName)
            {
                IDictData dal 
    = baseDal as IDictData;
                
    return dal.GetDictByDictType(dictTypeName);
            }
                    
            
    /// <summary>
            
    /// 根据字典类型名称和字典Value值(即字典编码),解析成字典对应的名称
            
    /// </summary>
            
    /// <param name="dictTypeName">字典类型名称</param>
            
    /// <param name="dictValue">字典Value值,即字典编码</param>
            
    /// <returns>字典对应的名称</returns>
            public string GetDictName(string dictTypeName, string dictValue)
            {
                IDictData dal 
    = baseDal as IDictData;
                
    return dal.GetDictName(dictTypeName, dictValue);
            }

    剩下的部分就是框架代码的部分了,根据一定的条件拿到对应的列表数据操作。这里不再赘述。 如果需要了解业务层和数据访问层的具体代码,可以和我联系,或者自己实现也不是难事。

    本文只是提供了一个解决的思路,相信各位大牛如要实现上面的功能也是小Case的了。

    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    在DataList控件中删除数据记录
    java中进行二进制,八进制,十六进制,十进制间进行相互转换
    Java中重载重写
    WCF 第七章 寄宿 在Windows 进程激活服务中寄宿服务
    .NET 中的十进制浮点类型(译文)
    .NET 中的二进制浮点类型(译文)
    WCF 第六章 序列化和编码 总结
    WCF 第六章 序列化和编码 为自定义序列化使用XmlSerializer
    WCF 第七章 寄宿 在IIS7中寄宿服务
    WCF 第七章 寄宿
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/1513392.html
Copyright © 2011-2022 走看看