对于业务层中的单独类来存储枚举定义的普遍共识是什么?这是不好的做法吗?这是否符合良好的 n 层设计?目前,我的枚举定义散布在不同的、我认为是相关的类周围——但我觉得它们应该在一个地方。事实上,这是否是一个主观问题,并且与我如何构建解决方案的其余部分有关?
3 回答
我真的不明白为什么你会在一个类中放置一个枚举- 也许你的意思是文件?
就个人而言,我为每个枚举都有一个单独的文件,其中包含枚举的名称。
我将此文件放置在使用枚举的位置附近并相应地命名它。
如果要跨程序集/命名空间共享枚举,我将使用最低的共享命名空间,因此它对 using 命名空间可见。
将枚举靠近它们的使用位置将使将代码分离到项目中变得更容易(如果需要)。
我看不出将它们全部放在一个文件中的意义——导航方面,Visual Studio 有足够多的导航功能,这是不需要的。
将枚举保存在单独的类中
在这种情况下,您将不相关的定义扔到一个类中,几乎没有任何好处。
将枚举定义为与其相关的类的嵌套类型
当你在一个类中保存枚举时,你可能会遇到命名问题:
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 时,在我看来,命名问题远比枚举定义的“物理”本地化重要得多。
我希望在我的项目中为所有常量和枚举使用单独的类。它提高了代码的可读性。你应该这样做,特别是如果你有一个在你的业务层和其他层中引用的 Comman 项目。但是,如果您只是为了一个常量/枚举类而添加不必要的引用,那么将它们放在同一个项目中会更有意义。
public class Enumerations
{
public enum Gender{
Male = 0,
Female = 1,
Unknown = 2
}
}
当你消费时,你可以这样做
GetPerson(Enumeration.Gender gender)
{
}