我需要一些关于在我们的网络项目中一般使用枚举的指导。更详细地说,我的意思是我们的查找表,如 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
}
通过使用这种方法,您的数据对象中仍然拥有魔数(Magic Number),但您可以使用一些有意义的文本向用户呈现可用选项,如果您更改枚举值或名称,则只需在服务器端更改它们而不是在客户端。
关于从数据库一直到 AngularJS 常量的 C# 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45564407/