标签:c#语言篇
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>();//依赖注入 地区信息数据层接口
private string[] sareacodearray = new string[] { };//声明 地区编码【可能是一对数组】 private string sareacode { get; set; }//声明 地区编码 private int sareacodearraylength { get; set; }//声明 地区编码长度 private sys_Area modelArea = new sys_Area();//声明并初始化地区实体,以便获取地区信息
<pre name="code" class="csharp">sVNunber = svb == null ? "" : svb.Value; sareanamearray = sareanamearray != "" ? sareanamearray.Substring(0, sareanamearray.Length - 1) : "";//截取,最后一个字符^
/// <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架构有一个较深的理解了,快向应用程序框架学习吧。
附图:
【删除】判断是否已【定制需求】
【删除】判断是否已【定制需求】
【新增:版本信息唯一性验证】
地区编码【随便输,只要匹配上就显示】
地区编码【随便输,只要匹配上就显示】
C#集合篇,在业务背景下(***产品升级管理):依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量巧用,属性实际运用,唯一性验证
标签:c#语言篇
原文地址:http://blog.csdn.net/hr1187362408/article/details/46457759