枚举的单独课程?

时间:2012-09-12 10:21:44

标签: c# .net enums projects-and-solutions class-structure

对业务层中用于存储枚举定义的单独类的一般共识是什么?这是不好的做法吗?这是否符合良好的n层设计?目前,我的枚举定义分布在不同的,我认为相关的类别 - 但我觉得它们应该在一个地方。事实上,这是一个主观问题,而且与我如何构建其余解决方案有关?

3 个答案:

答案 0 :(得分:9)

我真的不明白你为什么要在中放置一个枚举 - 也许你的意思是文件?

就个人而言,我为每个枚举提供了一个单独的文件,其中包含枚举的名称。

我将此文件放在使用枚举的位置附近并相应地命名它。

如果要在程序集/命名空间之间共享枚举,我将使用最低的共享命名空间,因此使用命名空间可以看到它。

使枚举靠近它们的使用位置会使代码分离成更容易的项目(如果需要)。

我没有看到将它们全部放在一个文件中的重点 - 导航明智的是,Visual Studio具有足够的导航功能,这是不需要的。

答案 1 :(得分:6)

将枚​​举保存在单独的类中

在这种情况下,你将不相关的定义扔到一个类中,几乎没有任何好处。

将枚​​举定义为与

相关的类的嵌套类型

当您在课程中持有枚举时,您可能会遇到命名问题:

class Foo
{
    public enum SomeType { /* ... */ }
    public SomeType SomeType { get; set; }
}

这会产生SomeType已定义的错误。

它可能只是个人品味,但大多数情况下我把我的枚举与他们相关的课程一起放在一起,而不是嵌套它们:

public enum SomeType { } 
public class Foo { }

我很多次试图让它们嵌套(我们当然是在谈论公开的枚举),但命名问题并不值得,例如:

class Foo
{
    public enum Enumeration { }
}

然后我可以在Foo类之外使用这样的枚举,如:Foo.Enumeration,但是遵循声明(在相同的命名空间中):

enum FooEnumeration { }
class Foo { }

给出了类似的结果,因为您不必输入'。'当您引用枚举时:FooEnumeration。而且,后者允许你这样做:

class Foo
{
    public FooEnumeration Enumeration { get; set; }
}

在以前的情况下会引起上述命名冲突。

<强>摘要

当使用具有强大GoTo功能的IDE时,在我看来,命名问题远比“物理”更重要。枚举定义的本地化。

答案 2 :(得分:1)

我希望在我的项目中为所有常量和枚举设置单独的类。它提高了代码的可读性。你应该这样做,特别是如果你有一个Comman项目,你正在业务层和其他层中引用。但是如果你只是为了Constant / Enum类添加不必要的引用,那么将它们放在同一个项目中更有意义。

public class Enumerations
{
 public enum Gender{
   Male = 0,
   Female = 1,
   Unknown = 2
 }
}

当你消费时,你可以像

那样做
GetPerson(Enumeration.Gender gender)
{

}