假设你在一个典型的博客场景中有一个'post‘对象。一篇博客文章可以有不同的状态,比如“草稿”、“发布”、“批准”等等。处理这个问题的最好方法是什么,特别是在数据库中以有意义的方式以及在代码中以有意义的方式存储这些数据。
通常,我看到这些数据存储为一个int类型,与数据库(本例中为“post”表)中的一行相关联。有时在数据库中有一个查找表来解释这些状态(例如,带有id=>1 name=>draft的状态表,等等)。通常,我会将它们转换为数据访问层中的枚举,以获得更有意义的代码表示形式,并避免出现“魔术数字”。
但是,此解决方案让开发人员更新两个不同的位置(数据库和代码)以添加或更改状态类型。
有什么更好的方法可以做到这一点呢?这似乎是我经常遇到的一种问题,但我从来没有看到一个好的方法来处理它。
发布于 2009-04-04 20:10:26
我喜欢按照您的建议设置status_id并创建一个查找表,其中包含状态和相应的枚举。
如果我的状态本质上是不可变的(例如,博客文章的状态,订单的状态等),我将创建一个单元测试来确定我使用的枚举数量是否与查找表中的数据匹配-因此,如果有人在将来向数据库添加状态,它将无法通过测试,告诉开发人员添加到枚举中。
发布于 2009-04-04 20:30:24
如果你在代码中将草稿映射到枚举草稿,这可能意味着你在代码中向草稿添加行为,例如,如果草稿是可编辑的,并基于此做出决定,那么它们应该只在一个地方。我在这里的方法是将行为移动到数据库中,并为该行为在db中添加一列(就像布尔列一样表示其是否可编辑),并将其映射到状态类而不是枚举。因此,如果引入了新的状态,则可以将其添加到具有相应行为的db中。
发布于 2009-04-04 20:36:09
我同意John Rasch的回答,但您可能会对Codeproject上的一篇讨论动态枚举生成的文章感兴趣
https://stackoverflow.com/questions/717705
复制相似问题