民族

恕,是创新之泥土

5 10月 , 2018  

原文地址:

在自家是系列中,我重点为自身正开发的云会员管理网也例进行介绍Web
API的施用,由于云会员的数额计划是支撑多只公司铺面,而每个局以得涵盖多个合作社的,因此有的字典型的数量要考虑当下面的不比。如对证书类型,收费处理状态,民族,职称抵这些固定化的情节,我们好停放大局字典里面,但是对一些假如会员相关的字典数据,如产品单位、产品种类等于内容,如果为漫天确定也大局的网字典,那么尽管差灵活性,这些数据应好由各自进行差异化处理。

函数式编程实践(1):高阶函数的以

1、云会员系统的字典数据模型

我们先来询问下基于Web API接口的云会员管理网的完好界面效果。

民族 1

是因为一般的云会员系统,都是容用户注册一个合作社,然后公司范围开设多单商铺的,如系的登陆界面如下所示。

民族 2

因而数据的界定需要考虑的再广大,他们之关系如下所示。

民族 3

设我辈原本计划之字典模型如下所示。

民族 4

一旦当商店数据是层次上,我们得考虑企业层级的数额字典存储,但是我们越来越分析好看出,虽然数额字典数据是铺层级的,但是多少字典的项目(如证件类型、产品项目等)这些是原则性不换的,也就是是咱而存储公司层级的字典数据,那么也唯有是需要仓储对应的字典项目即可。因此我们好加多一个及TB_DictData的数据表类似的表进行仓储即可,它的数量计划如下所示。

民族 5

为有利于于系里用同样的字典项目内容,我们创建同了一个联之字典项目管理模块,也便是系字典管理界面,如下所示。

民族 6

 

描绘这个随笔只是怀念呼唤一种精神。我们会意识这样同样栽情景:在美国,越是从Windows
API、MFC、Windows
Forms、WPF一路活动来的直技术人员,越是为各个一样糟糕新技巧带来的反如果欢呼。同样的工作到了华,则只有无尽的封建、抱怨、排斥甚至麻木。园子里常常对LINQ不屑的声音不在个别。我们有足的说辞相信,要惦记翻新,首先要对新东西有同一栽宽容,只有宽容对待,才会理性发现、理性领悟、理性升华、理性创造。固步自封、安于现状、畏手畏脚、盲目排新的中华民族,永远无法因为创新者的态度战胜那些曾经敬仰我们的人口。也许,那久违的仰慕已经成为您本人每一个丁的担子。

2、公司层级的字典数据存储实现

出矣地方的设计模型,相信大部分人手还足以想到她的现实贯彻思路了。

率先我们要以网字典数据也参照,如默认就是赢得系统的字典项目数目,如果商家级别的用户改要去了字典数据内容,那么相应的字典类别的字典项目就是应为改的吧仍了。

唯独我们不容许吧新建公司账户的时节,都为每个公司机关创建同客对诺类型的字典数据,那样稍显麻烦,而且同开始便创造为比费心。

优先树一个小卖部字典的多寡管理界面,它跟字典数据管理界面一样,不过是储存在另外一个表里面,自动根据目前用户之商号标识进行仓储的。

民族 7

批量添加公司字典的数码如下所示。

民族 8

貌似我们于应用企业层级的字典数据要系统公共层级的字典数据的下,都是因字典类型进行判定的。

用当柜层级根据字典项目类别获取数据的早晚,我们于作业接口底层做了判断,判断如果对承诺公司之字典项无数量,则复制一客过去,如果商家层次来照应之数据类型,那么就算获得企业层级的字典项目数目即可。

实际的代码逻辑如下所示。

        /// <summary>
        /// 根据字典类型名称获取所有该类型的字典列表集合
        /// </summary>
        /// <param name="dictType">字典类型名称</param>
        /// <param name="corpId">公司ID</param>
        /// <returns></returns>
        public List<CorpDictDataInfo> FindByDictType(string dictTypeName, string corpId)
        {
            ICorpDictData dal = baseDal as ICorpDictData;
            List<CorpDictDataInfo> list = dal.FindByDictType(dictTypeName, corpId);

            //如果公司字典没有数据,则从系统字典获取
            if (list.Count == 0)
            {
                List<DictDataInfo> dict = BLLFactory<DictData>.Instance.FindByDictType(dictTypeName);
                foreach (DictDataInfo info in dict)
                {
                    list.Add(new CorpDictDataInfo(info, corpId));                    
                }

                //写入公司字典表,避免下次再去获取
                foreach (CorpDictDataInfo info in list)
                {
                    baseDal.Insert(info);
                }
            }
            return list;
        }

于Web API的控制器接口,还是与其余的处理同,增加对应之参数处理即可。

        /// <summary>
        /// 根据字典类型名称获取所有该类型的字典列表集合
        /// </summary>
        /// <param name="dictType">字典类型名称</param>
        /// <param name="corpId">公司ID</param>
        /// <returns></returns>
        [HttpGet]
        public List<CorpDictDataInfo> FindByDictType(string dictTypeName, string corpId, string token)
        {          
            //令牌检查,不通过则抛出异常
            CheckResult checkResult = CheckToken(token);

            return BLLFactory<CorpDictData>.Instance.FindByDictType(dictTypeName, corpId);
        }

 

在Facade层定义字典的应和接口的时,我们的代码如下所示

        /// <summary>
        /// 根据字典类型名称获取所有该类型的字典列表集合
        /// </summary>
        /// <param name="dictType">字典类型名称</param>
        /// <param name="corpId">公司ID</param>
        /// <returns></returns>
        [OperationContract]
        List<CorpDictDataInfo> FindByDictType(string dictTypeName, string corpId);

以根据Web API的包裹调用接口,我们的调用封装类如下所示。其中token以及Web
API的有关参数处理,在基类模块进行了包装,减少了重重代码的拼接。

     /// </summary>
        /// <param name="dictType">字典类型名称</param>
        /// <param name="corpId">公司ID</param>
        /// <returns></returns>
        public List<CorpDictDataInfo> FindByDictType(string dictTypeName, string corpId)
        {
            var action = "FindByDictType";
            string url = GetTokenUrl(action) + string.Format("&dictTypeName={0}&corpId={1}", dictTypeName, corpId);

            List<CorpDictDataInfo> result = JsonHelper<List<CorpDictDataInfo>>.ConvertJson(url);
            return result;
        }

下一场我们当界面及之字典项目下拉列表,则可以经过扩大函数的艺术进行绑定。

        /// <summary>
        /// 初始化字典列表内容
        /// </summary>
        private void InitDictItem()
        {
            //初始化代码
            this.txtProductType.BindDictItemsByCorp("会员产品类型", LoginUserInfo.CompanyId);
        }

        /// <summary>
        /// 绑定下拉列表控件为指定的数据字典列表[如果公司字典记录不存在,则使用系统字典记录,否则使用公司记录]
        /// </summary>
        /// <param name="combo">下拉列表控件</param>
        /// <param name="dictTypeName">数据字典类型名称</param>
        public static void BindDictItemsByCorp(this ComboBoxEdit combo, string dictTypeName, string corpId)
        {
            BindDictItemsByCorp(combo, dictTypeName, corpId, null);
        }

        /// <summary>
        /// 绑定下拉列表控件为指定的数据字典列表[如果公司字典记录不存在,则使用系统字典记录,否则使用公司记录]
        /// </summary>
        /// <param name="combo">下拉列表控件</param>
        /// <param name="dictTypeName">数据字典类型名称</param>
        /// <param name="defaultValue">控件默认值</param>
        public static void BindDictItemsByCorp(this ComboBoxEdit combo, string dictTypeName, string corpId, string defaultValue)
        {
            Dictionary<string, string> dict = CallerFactory<ICorpDictDataService>.Instance.GetDictByDictType(dictTypeName, corpId);
            List<CListItem> itemList = new List<CListItem>();
            foreach (string key in dict.Keys)
            {
                itemList.Add(new CListItem(key, dict[key]));
            }

            BindDictItems(combo, itemList, defaultValue);
        }

如上就是是一个整体性的笔触,并以系统受到能够顺利解决问题之做法,希望大家好借鉴。

 

不计其数文章如下所示:

Web
API应用架构在Winform混合框架中的动(1)

Web
API民族应用架构在Winform混合框架中之采取(2)–自定义格外结果的拍卖

Web
API接口设计经验总结 

Web
API应用架构在Winform混合框架中之采用(3)–Winfrom界面调用WebAPI的经过分解

 Web
API应用架构在Winform混合框架中的行使(4)–利用代码生成工具快速开总体应用

Web
API应用架构在Winform混合框架中的使(5)–系统级别字典和店铺级别字典并存的处理方式

 

俺们做技术之,更要宽容。新技巧好不好,我们先行不设错过否认,去质疑,不要为习惯的沉思阻止。先失品尝一下,弄明白了,也许就即知晓她的优势了。有了如此的平等种心态,或许哪天我们协调吧足以打来一个初技巧来,这不纵发了创新为?

这个标题是自己自旁人的同篇博文中摘要出来的,并非是自身之总结,有感而发,下面是原文摘要:

 

 

 

,


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图