我应该使用Enums作为鉴别器吗?

时间:2009-11-30 11:24:05

标签: .net oop enums

枚举什么时候会崩溃?


为了支持现有系统中的新功能,我只是考虑在我的数据库模式中为实体表实现某种形式的鉴别器。

在想要开始做最少的工作时,我首先决定在业务实体层的整数列和C#枚举,以便于阅读。这将提供穷人的多态性,最终可能会变成一种实际的多态性,也可能是一种策略模式。

我决定咨询博客圈,因为我从来没有完全习惯使用枚举 - 我想知道,我应该跳过枚举并直接进入结构或类吗?:

首先,我发现了一个'Enums are Evil'的断言,但我觉得这是一种过度概括,并没有直接解决我的用例。

如果我确实选择枚举,那么可以通过在枚举中添加额外的元数据来讨论我如何extend my mileage

接下来,我遇到了Jimmy Bogard关于Enumeration Classes的讨论,并在'Strategies and discriminators in NHibernate'中进一步讨论了

我应该跳过枚举并直接进入枚举类吗?或者是否有人对如何向我的域模型添加简单的实体鉴别器提出任何其他建议。

更新:

我还要补充说,NHibernate和LINQ to SQL(可能还有所有其他与ORM相关的数据访问方法)使得枚举的使用非常诱人,因为它们let you map a discriminator column在映射中透明。

映射枚举类是否容易?

相关问题:


免责声明:

尽管我不小心使用了术语实体(小写'e'),但我并没有声称在这里讨论DDD ......

2 个答案:

答案 0 :(得分:4)

今天枚举是邪恶的,明天OOP可能是邪恶的,AOP会没事。

只需使用合适的工具即可完成工作。请记住,保持简单 ...

如果枚举只是为了告诉对象的类型 - 不要打扰,请使用它。

如果它有一些业务逻辑,那么它可能是另一个类。

答案 1 :(得分:2)

那些枚举类看起来很整洁,我常常嫉妒Java的枚举。

我认为通常的规则适用:做可能有效的最简单的事情。如果你发现自己在枚举上有多个switch,那就是气味,是时候考虑你找到的模式了。

否则,为什么要为自己增加一些你不需要的东西?