适当使用enum做数据字典 ( .net c# winform csharp asp.net webform )
2016-09-12 11:35
225 查看
在一些应用中,通常会用到很多由一些常量来进行描述的状态数据,比如性别(男、女),审核(未审核、已审核)等。在数据库中一般用数字形式来存储,比如0、1等。
不好的做法
经常看到一些应用(ps:最近又看到)没有把这类数据整理成一个数据字典,比如经常重复这样的html:
然后在后端逻辑判断的时候又用这样的代码:
在显示数据的时候又出现这样的代码:
这样的代码不仅不利于维护,而且,可读性也是非常的差。
使用enum改造
对于以上这类比较固定而且数据量又比较小的状态,可以选择使用enum来改造它,首先定义这么一个枚举类型:
代表了审核的2种状态,这样在进行判断的时候就可以比较直观的看出来了。但是对于数据绑定,这样做还不够,所以我选择使用Attribute来描述:
现在,关于审核状态的枚举类型就变成这样了:
然后可以通过取出它的值以及EnumDescription,来实现绑定,无论在可读性还是维护上都是方便许多。
使用缓存
由于获取EnumDescriptionAttribute值是需要通过反射来实现的,如果每次都反射调用,那么性能将会比较糟糕。另外,调用Enum.GetNames、Enum.GetValues以及具体的如AuditState.UnAudit.ToString()方法也都是需要反射的,所以也要注意。
在这里使用静态变量来缓存这些信息,并且利用了泛型的特性,保证每种枚举类型都有一个对应的缓存信息,代码如下:
具体使用
对于数据绑定可以这样子做:
后端代码:
对以上这种数据绑定可以专门封装成一个用户控件,以便重复利用。
显示数据的时候可以这样:
判断的时候也可以很直观:
当然,使用的这些存在类型转换的地方还有待优化,比如到int32类型的转换、到AuditState类型的转换,都可以通过对EnumHelper类进行修改来完成,这里只是为了演示,就不再具体了。
更多需求
以上的方法只能适用于一种语言中,假如还需要显示英文的描述,那么就需要对以上的类型进行调整了。比如可以为EnumDescriptionAttribute添加一个属性:
或者是再创建一个名为EnEnumDescriptionAttribute的类型,无论是哪种方法,都需要在EnumHelper类里面做更多的调整了。
个人认为更好的做法是使用外部xml文件,EnumHelper根据需要加载相应语言的描述文件,如:
不好的做法
经常看到一些应用(ps:最近又看到)没有把这类数据整理成一个数据字典,比如经常重复这样的html:
然后在后端逻辑判断的时候又用这样的代码:
在显示数据的时候又出现这样的代码:
这样的代码不仅不利于维护,而且,可读性也是非常的差。
使用enum改造
对于以上这类比较固定而且数据量又比较小的状态,可以选择使用enum来改造它,首先定义这么一个枚举类型:
代表了审核的2种状态,这样在进行判断的时候就可以比较直观的看出来了。但是对于数据绑定,这样做还不够,所以我选择使用Attribute来描述:
使用缓存
由于获取EnumDescriptionAttribute值是需要通过反射来实现的,如果每次都反射调用,那么性能将会比较糟糕。另外,调用Enum.GetNames、Enum.GetValues以及具体的如AuditState.UnAudit.ToString()方法也都是需要反射的,所以也要注意。
在这里使用静态变量来缓存这些信息,并且利用了泛型的特性,保证每种枚举类型都有一个对应的缓存信息,代码如下:
具体使用
对于数据绑定可以这样子做:
后端代码:
对以上这种数据绑定可以专门封装成一个用户控件,以便重复利用。
显示数据的时候可以这样:
判断的时候也可以很直观:
当然,使用的这些存在类型转换的地方还有待优化,比如到int32类型的转换、到AuditState类型的转换,都可以通过对EnumHelper类进行修改来完成,这里只是为了演示,就不再具体了。
更多需求
以上的方法只能适用于一种语言中,假如还需要显示英文的描述,那么就需要对以上的类型进行调整了。比如可以为EnumDescriptionAttribute添加一个属性:
或者是再创建一个名为EnEnumDescriptionAttribute的类型,无论是哪种方法,都需要在EnumHelper类里面做更多的调整了。
个人认为更好的做法是使用外部xml文件,EnumHelper根据需要加载相应语言的描述文件,如:
相关文章推荐
- c#.net 使用NPOI导入导出标准Excel (asp.net winform csharp)
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- Asp.net/c#+OleDb操作excel文件(二),数据传输使用Parameters
- C#使用SQLite数据库(asp.net/winform)
- Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- 在网页中显示CHM (c# csharp .net asp.net winform)
- Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据
- Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据
- C# / MSSQL / WinForm / ASP.NET - SQLHelper中返回SqlDataReader数据
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- 在ASP.Net With C# 中使用 DataGrid 控件分页展示数据
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- C#使用SQLite数据库(asp.net/winform)
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- C# ,ASP.NET,Winform将数据导出到Execl汇总
- ASP.NET WEBFORM 中导出数据,使用文件流的方式
- 如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据
- 使用ASP.NET(C#)查询和显示 Excel 数据