我需要一些关于在整个Web项目中普遍使用枚举的指导。更详细地说,我的意思是我们的查找表,如 PersonType、PrivilegeType、ContactType 等将在 dll 中创建(或 C# 文件,每个枚举一个文件(,比如 Enums.dll,然后将枚举作为常量添加到我们的"通用"AngularJS 模块中,例如:
angular
.module('common', [])
.constant('ePrivilegeType', {
NoPermissions: 1,
ViewOnly: 2,
ViewAndUpdate: 3
})
.constant('ePersonType', {
Administration: 1,
Student: 2,
Father: 3,
Mother: 4
});
这种工作流程是否常见且可以接受?我们如何实现这种工作流程?通过我们所有的项目使用枚举,这将使我们的生活更加轻松。
如果这些匹配仅用于向用户显示(例如在组合框中(,我使用了一个为我提供这些值的 Web api。因此,在angularjs中使用的数据对象中仍然是这个神奇的数字。但是从/api/enum/privilegeTypes
下的服务器中,您将获得以下格式的对象数组
[{
value: 1,
name: "NoPermissions",
description: "This is not allowed"
}, ...]
在服务器(在 .net 中(上,您可以创建一个简单的类(例如EnumWrapper
(和工厂方法(例如EnumWrapper.From<PrivilegeType>()
或EnumWrapper.From(enumTypeName)
(,它遍历所有枚举值(使用Enum.GetValues()
(并创建所需的列表并返回它。
public enum PrivilegeType
{
[Description("Access not allowed")]
NoPermissions = 1,
[Description("Read only ")]
ViewOnly = 2,
[Description("Read and write access")]
ViewAndUpdate = 3
}
通过使用这种方法,数据对象中仍然有幻数,但您可以使用一些有意义的文本向用户显示可用选项,如果您更改枚举值或名称,您只需在服务器端而不是客户端更改它们。