在这里问question之前,我从未认为(枚举)是“坏事”。对于那些认为它们不是最佳实践的人来说,有哪些方法/模式可以避免在代码中使用它们?
编辑:
public Enum SomeStatus
Approved = 1
Denied = 2
Pending =3
end Enum
答案 0 :(得分:26)
在Fowler的Refactoring中描述了枚举的问题,它被认为是代码异味。它与类型安全无关,而是强迫您在代码中散布switch
语句,从而违反 DRY原则。
State pattern是相同结构的更好模型,因为它允许您在同一个类中实现和改变与相同状态相关的逻辑。这也增加了凝聚力并减少了阶级耦合。
答案 1 :(得分:9)
我认为使用枚举是一件好事。它提供了强大的类型安全性。
它们有时会有一些缺点,但这通常与预先不知道每个可能选项的情况有关。如果您有一组固定的选项,例如您的示例,那么强类型枚举是一件好事,不应该避免。
答案 2 :(得分:6)
我喜欢海龟 class enums。
答案 3 :(得分:2)
枚举的要点是仅在一个地方定义(数据库术语中的规范化)。如果这个枚举合法地是你正在写的课程的一部分,那么继续。
否则,特别是如果您发现自己多次声明,请重新考虑您的枚举内容。它实际上是否携带数据?是否有足够的值来考虑将可能性存储在数据库中?
答案 4 :(得分:1)
我喜欢在相关的值集上放置易于使用和理解的名称的枚举。我只是不喜欢c#实现。使用您的示例枚举:
SomeStatus status = 17;
这种编译和运行没有任何抱怨,即使17超出界限。
德尔福有更好的枚举(或者至少,它曾经使用过 - 自从我使用它以来已经好几年了)