将长枚举拆分为较小的组或名称空间

时间:2017-03-28 17:27:35

标签: c# enums

我目前正处理一个包含大约100多个元素的长枚举,其中每个元素中的第一个单词用于对条目进行分类:

public enum UserPermissions{
    FilesRead,
    FilesWrite,
    FoldersRead,
    FoldersWrite,
    NotesCreate,
    NotesDelete,
    NotesModify,
    ...
    ...
}

我想使用命名空间将权限分类为更有条理的结构,例如:

UserPermissions.Files.Read;
UserPermissions.Notes.Modify;

这里的主要问题是通过避免或最小化所需的重构来保持与现有代码的兼容性。什么是最好的解决方案?

我目前的想法是将枚举转换为类:

public class UserPermissions
{
    public enum Files{
        Read  = 1,
        Write = 2,
    }

    public enum Folders
    {
        Read  = 3,
        Write = 4,
    }
    ...
    ...
}

但这需要重构旧代码,例如UserPermissions.FilesReadUserPermissions.Files.Read

2 个答案:

答案 0 :(得分:1)

如果你真的不想重构,你可以提供临时性的:

public enum UserPermissions{
    FilesRead,
    FilesWrite,
    FoldersRead,
    FoldersWrite,
    NotesCreate,
    NotesDelete,
    NotesModify,
}

public class UserPermission //Other name then enum, or the class must be under a different namespace
{
    public enum Files
    {
        Read  = UserPermissions.FilesRead,
        Write = UserPermissions.FilesWrite,
    }

    public enum Folders
    {
        Read  = UserPermissions.FoldersRead,
        Write = UserPermissions.FoldersWrite,
    }
}

如果您现在有方法,则可以简单地投射(Folders)userPermission

你不应该这样做。它容易出错(投射),而不是根据DRY(不要重复自己)。你应该开始重构。

简单编写新的枚举,编译,修复,编译,修复,编译[...] - >成功。

答案 1 :(得分:0)

如果您使用其中一个将其保存到数据库,则应保留与旧代码相同的编号,否则您将遇到麻烦,更改结构不应影响代码的行为,但您将需要重构一切,到目前为止,这是我在这里看到的成本