C#集合篇,在业务背景下(***产品升级管理):依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量巧用,属性实际运用,唯一性验证

QQ:1187362408 欢迎技术交流和学习

关于系统产品升级报告管理,业务需求:

TODO:

1,升级报告管理:依据各县区制定升级报告(关联sAreaCode,给每个地区观看具体升级报告信息)

2,运用的技术:依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量与可null变量巧用,属性实际运用,唯一性验证,url传递中文编码和解码问题

讲解篇:1,服务端aspx,2,服务端后台返回数据(这里采用服务器端程序:aspx.cs)

TODO:

一,讲解篇依据:技术分类进行逐一讲解

二,开源思想:分享和总结技术

一,讲解篇依据:技术分类进行逐一讲解:

1,依赖注入

/*TODO:非功能性辅助需求
         * 业务需求:
         * 升级报告管理:依据各县区制定升级报告(关联sAreaCode,给每个地区观看具体升级报告信息)
         * 主表:sys_UpdateReport 子表:sys_UpdateReportCustom
         * 标识:gKey【键值】,sVersionNunber【版本信息关联子表】,sAreaCode【对每一个地区升级】
         */
        Isys_UpdateReportCustomBLL iBLL = IOCFactory.GetIOCResolve<Isys_UpdateReportCustomBLL>();//依赖注入 版本升级报告业务逻辑层接口
        Isys_AreaDAL iAreaDAL = IOCFactory.GetIOCResolve<Isys_AreaDAL>();//依赖注入 地区信息数据层接口

2,变量声明

private string[] sareacodearray = new string[] { };//声明 地区编码【可能是一对数组】
        private string sareacode { get; set; }//声明 地区编码
        private int sareacodearraylength { get; set; }//声明 地区编码长度
        private sys_Area modelArea = new sys_Area();//声明并初始化地区实体,以便获取地区信息

3,三元表达式

<pre name="code" class="csharp">sVNunber = svb == null ? "" : svb.Value;

sareanamearray = sareanamearray != "" ? sareanamearray.Substring(0, sareanamearray.Length - 1) : "";//截取,最后一个字符^






4,常用字符串相关操作方法

/// <summary>
        /// 依据地区编码返回地区名称
        /// </summary>
        /// <param name="sAreaCode">地区编码</param>
        /// <returns>地区名称(可能是多个)</returns>
        public string GetsAreaNameBysAreaCode(object sAreaCode)
        {
            string sareanamearray = "";//声明 地区名称【可能是一对数组】
            if (sAreaCode != null && sAreaCode.ToString() != "")
            {
                sareacode = sAreaCode.ToString();
                /*if (sareacode.IndexOf('^') == -1)
                    sareacode = sareacode + '^';//当用户输入一个地区编码,忘记给它自定义添加'^'符号时,检索后台添加一个,便于存取数据及页面展示*/
                sareacodearray = sareacode.Split('^');//地区编码数组
                sareacodearraylength = sareacodearray.Length;//地区编码数组长度
                for (int i = 0; i < sareacodearray.Length; i++)//sAreaCode格式实际中为:code1^code2,sareanamearray格式实际中为:name1,name2
                {
                    modelArea = iAreaDAL.GetModelByID(sareacodearray[i]);//地区
                    if (modelArea != null && !string.IsNullOrEmpty(modelArea.sName))
                    {
                        sareanamearray += modelArea.sName + ",";//地区名称,以','隔开页面展示
                        continue;
                    }
                }
                sareanamearray = sareanamearray != "" ? sareanamearray.Substring(0, sareanamearray.Length - 1) : "";//截取,最后一个字符^
            }
            return sareanamearray;
        }

5,ADO.NET

/// <summary>
        /// 定制需求【依据主表sys_UpdateReport中标识VersionNunber返回List<sys_UpdateReportCustom>】
        /// </summary>
        /// <param name="where">VersionNunber</param>
        /// <returns>sys_UpdateReportCustom数量</returns>
        public int? GetCustomList(System.Linq.Expressions.Expression<Func<sys_UpdateReportCustom, bool>> where)
        {
            return iDal.GetList(where).ToList().Count;
        }

        /// <summary>
        /// 定制需求【依据主表sys_UpdateReport中标识VersionNunber返回List<sys_UpdateReportCustom>】
        /// </summary>
        /// <param name="where">VersionNunber</param>
        /// <returns>List<sys_UpdateReportCustom></returns>
        public List<sys_UpdateReportCustom> GetList(System.Linq.Expressions.Expression<Func<sys_UpdateReportCustom, bool>> where)
        {
            return iDal.GetList(where);
        }

        public sys_UpdateReportCustom GetModelByID(Guid gkey)
        {
            return iDal.GetModelByCondition(P => P.gKey.Equals(gkey));
        }

6,EF机制

private Isys_UpdateReportCustomDAL iDal;
        private IUnitOfWork<BaseFrameworkEntities> uwork;
        public sys_UpdateReportCustomBLL(IUnitOfWork<BaseFrameworkEntities> uwork, Isys_UpdateReportCustomDAL iDal)
        {
            this.iDal = iDal;
            this.uwork = uwork;
            this.uwork.LogEvent = new LogEventHandler(Sys_LogBLL.WriteLog);
        }

7,T4模板自动生成实体类

/// <summary>
    /// 没有元数据文档可用。
    /// </summary>
    [EdmEntityTypeAttribute(NamespaceName="HIP_BaseFrameworkModel", Name="sys_UpdateReportCustom")]
    [Serializable()]
    [DataContractAttribute(IsReference=true)]
    public partial class sys_UpdateReportCustom : EntityObject
    {
        #region 工厂方法
    
        /// <summary>
        /// 创建新的 sys_UpdateReportCustom 对象。
        /// </summary>
        /// <param name="gKey">gKey 属性的初始值。</param>
        /// <param name="sVersionNunber">sVersionNunber 属性的初始值。</param>
        /// <param name="sAreaCode">sAreaCode 属性的初始值。</param>
        /// <param name="dOperateTime">dOperateTime 属性的初始值。</param>
        public static sys_UpdateReportCustom Createsys_UpdateReportCustom(global::System.Guid gKey, global::System.String sVersionNunber, global::System.String sAreaCode, global::System.DateTime dOperateTime)
        {
            sys_UpdateReportCustom sys_UpdateReportCustom = new sys_UpdateReportCustom();
            sys_UpdateReportCustom.gKey = gKey;
            sys_UpdateReportCustom.sVersionNunber = sVersionNunber;
            sys_UpdateReportCustom.sAreaCode = sAreaCode;
            sys_UpdateReportCustom.dOperateTime = dOperateTime;
            return sys_UpdateReportCustom;
        }

        #endregion

        #region 基元属性
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.Guid gKey
        {
            get
            {
                return _gKey;
            }
            set
            {
                if (_gKey != value)
                {
                    OngKeyChanging(value);
                    ReportPropertyChanging("gKey");
                    _gKey = StructuralObject.SetValidValue(value);
                    ReportPropertyChanged("gKey");
                    OngKeyChanged();
                }
            }
        }
        private global::System.Guid _gKey;
        partial void OngKeyChanging(global::System.Guid value);
        partial void OngKeyChanged();
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.String sVersionNunber
        {
            get
            {
                return _sVersionNunber;
            }
            set
            {
                OnsVersionNunberChanging(value);
                ReportPropertyChanging("sVersionNunber");
                _sVersionNunber = StructuralObject.SetValidValue(value, false);
                ReportPropertyChanged("sVersionNunber");
                OnsVersionNunberChanged();
            }
        }
        private global::System.String _sVersionNunber;
        partial void OnsVersionNunberChanging(global::System.String value);
        partial void OnsVersionNunberChanged();
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.String sAreaCode
        {
            get
            {
                return _sAreaCode;
            }
            set
            {
                OnsAreaCodeChanging(value);
                ReportPropertyChanging("sAreaCode");
                _sAreaCode = StructuralObject.SetValidValue(value, false);
                ReportPropertyChanged("sAreaCode");
                OnsAreaCodeChanged();
            }
        }
        private global::System.String _sAreaCode;
        partial void OnsAreaCodeChanging(global::System.String value);
        partial void OnsAreaCodeChanged();
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
        [DataMemberAttribute()]
        public global::System.String sContent
        {
            get
            {
                return _sContent;
            }
            set
            {
                OnsContentChanging(value);
                ReportPropertyChanging("sContent");
                _sContent = StructuralObject.SetValidValue(value, true);
                ReportPropertyChanged("sContent");
                OnsContentChanged();
            }
        }
        private global::System.String _sContent;
        partial void OnsContentChanging(global::System.String value);
        partial void OnsContentChanged();
    
        /// <summary>
        /// 没有元数据文档可用。
        /// </summary>
        [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
        [DataMemberAttribute()]
        public global::System.DateTime dOperateTime
        {
            get
            {
                return _dOperateTime;
            }
            set
            {
                OndOperateTimeChanging(value);
                ReportPropertyChanging("dOperateTime");
                _dOperateTime = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("dOperateTime");
                OndOperateTimeChanged();
            }
        }
        private global::System.DateTime _dOperateTime;
        partial void OndOperateTimeChanging(global::System.DateTime value);
        partial void OndOperateTimeChanged();

        #endregion

    
    }

8,ref变量与可null变量巧用

int? sVersionNunber = null;//某版本下,定制需求数量
            string sVNunber = "";//版本号
/// <summary>
        /// 引用类型变量sVersionNunber,通过指针传递改变其初始值
        /// </summary>
        /// <param name="sVersionNunber">引用类型变量sVersionNunber</param>
        /// <param name="sVNunber">当前版本号:sversionnunber</param>
        public void GetUCustomLengthBysVNunber(ref int? sVersionNunber, string sVNunber)
        {
            if (!string.IsNullOrEmpty(sVNunber))
            {
                sVersionNunber = iCuBLL.GetCustomList(P => P.sVersionNunber == sVNunber);
            }
        }

9,只读属性(为什么只读,因为效率比可写可读属性高)实际运用

/// <summary>
        /// 版本信息
        /// </summary>
        private string SVNBER
        {
            get
            {
                if (!string.IsNullOrEmpty(Request.QueryString["sversionnunber"]))
                {
                    return HttpUtility.UrlDecode(Request.QueryString["sversionnunber"]);//解码版本信息【URL中已编码】
                }
                else
                {
                    return "";
                }
            }
        }
        /// <summary>
        /// 主键属性
        /// </summary>
        private string PKey
        {
            get
            {
                if (!string.IsNullOrEmpty(Request.QueryString["gKey"]))
                {
                    return Request.QueryString["gKey"].ToString();
                }
                else
                {
                    return "";
                }
            }
        }

10,唯一性验证

方法:
//【新增】:验证版本信息是否重复
        protected bool CheckAddCode(sys_UpdateReport model)
        {
            bool isHave = false;
            List<sys_UpdateReport> CheckList = iBLL.GetList(P => P.sVersionNunber == model.sVersionNunber);
            if (CheckList.Count > 0)
            {
                isHave = true;
            }
            return isHave;
        }

        //【修改】:验证版本信息是否重复
        protected bool CheckUpdateCode(sys_UpdateReport model)
        {
            bool isCheck = false;
            List<sys_UpdateReport> CheckList = iBLL.GetList(P => P.sVersionNunber == model.sVersionNunber);
            if (CheckList.Count > 1)
            {
                isCheck = true;
            }
            else
            {
                foreach (var item in CheckList)
                {
                    if (!item.gKey.Equals(model.gKey))
                    {
                        isCheck = true;
                    }
                }
            }
            return isCheck;
        }
调用:
if (CheckUpdateCode(model))
                {
                    Messages("版本信息重复,请重新输入!");
                    return;//跳出方法
                }
if (CheckAddCode(model))
                {
                    Messages("版本信息重复,请重新输入!");
                    return;
                }

11,url传递中文编码和解码问题

主页面:
sversionnunber = chk.attr("sversionnunber");
            //参数:【sversionnunber】版本号
            winer.OpenWin(sversionnunber + '_定制需求', GetUrl(this) + 'UpdateReportCustomList.aspx?sversionnunber=' + encodeURI(sversionnunber), 800, 600, false, this);
            return false;
子页面:
前段javascript:
var sversionnunber = unescape(getParameter("sversionnunber")); //版本信息
后台aspx.cs:
return HttpUtility.UrlDecode(Request.QueryString["sversionnunber"]);//解码版本信息【URL中已编码】
看完了以上,相信你已经对B/S架构有一个较深的理解了,快向应用程序框架学习吧。
二,开源思想:能够帮助我们快速成长

附图:

【删除】判断是否已【定制需求】

【删除】判断是否已【定制需求】

【新增:版本信息唯一性验证】

地区编码【随便输,只要匹配上就显示】

地区编码【随便输,只要匹配上就显示】



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HR1187362408/article/details/46457759
文章标签: C#语言篇
个人分类: C#
上一篇封装,继承和多态
下一篇C#中方法,属性与索引器
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭