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

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

热度:37   发布时间:2016-05-05 03:28:21.0
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架构有一个较深的理解了,快向应用程序框架学习吧。
二,开源思想:能够帮助我们快速成长

附图:

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

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

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

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

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



  相关解决方案