状态码设计模式

4
假设您在典型的博客情景中有一个“文章”(post)对象。 博客文章可以具有不同的状态,例如“草稿”(draft)、“已发布”(published)、“已批准”(approved)等。 针对以有意义的方式在数据库中存储这些数据并以有意义的方式在代码中使用它们,最佳的处理方法是什么?
通常将这些值作为与数据库中的行相关联的整数存储(在此示例中的“posts”表中)。 有时在数据库中会有一个查找表来解释这些状态(即状态表,其中id=>1表示name=>draft等)。 通常,我会将它们转换为Data Access Layer中的枚举,以获得更有意义的代码表示并避免出现“魔法数字”。
然而,这种解决方案需要开发人员更新两个不同的位置(数据库和代码)以添加或更改状态类型。
有更好的解决方法吗? 这似乎是我经常遇到的一类问题,但我从未见过一个好方法来处理它。
3个回答

3
我喜欢设置一个status_id,并创建一个包含状态及其相应枚举的查找表,就像你建议的那样。
如果我的状态本质上是不可变的(例如博客文章的状态、订单的状态等),我会创建一个单元测试来确定我使用的枚举数量是否与查找表中的数据匹配 - 因此,如果将来有人向数据库添加一个状态,则测试将失败,告诉开发人员要添加到枚举中。

1

在我看来,它们应该只存在于一个地方。如果你正在将草稿映射到代码中的枚举DRAFT,那可能意味着你正在为草稿添加代码行为,例如如果草稿是可编辑的,然后基于此做出决策。 我的方法是将行为移动到数据库中,并为该行为添加一个列(例如布尔列以表示其是否可编辑),并将其映射到状态类而不是枚举类。因此,如果引入了新状态,则可以将其添加到数据库中并附带相应的行为。


0

我同意John Rasch的回答,但你可能会对Codeproject上关于动态生成枚举的文章感兴趣。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接