状态码设计模式

时间:2009-04-04 19:55:08

标签: design-patterns

假设您在典型的博客方案中有'post'对象。博客文章可以有不同的状态,如“草稿”,“已发布”,“已批准”等。处理此问题的最佳方法是什么,特别是以有意义的方式将这些数据存储在数据库中以及以有意义的方式存储在代码中。

通常我看到这些存储为与数据库中的行相关联的int(在此示例中为'posts'表)。有时在数据库中有一个查找表来解释这些状态(即状态表,其中id => 1 name => draft等)。通常,我会将这些转换为数据访问层中的枚举,以获得更有意义的代码表示并避免使用“幻数”。

但是,此解决方案让开发人员更新两个不同的位置(数据库和代码)以添加或更改状态类型。

有什么更好的方法可以做到这一点?这似乎是我经常遇到的一种问题,但我从来没有看到过处理它的好方法。

3 个答案:

答案 0 :(得分:3)

我喜欢设置status_id并创建一个包含状态的查找表,并按照您的建议创建相应的枚举。

如果我的状态基本上是不可变的(例如博客文章状态,订单状态等),我将创建一个单元测试,确定我使用的枚举数是否与查找表中的数据匹配 - 所以如果有人将来要向数据库添加状态,它将无法通过测试,告诉开发人员添加到枚举。

答案 1 :(得分:1)

IMO,如果您将草稿映射到代码中的枚举DRAFT,那么它们应该只在一个地方,这可能意味着您要在代码中添加草稿行为,例如草稿是否可编辑,例如基于那个。   我的方法是将行为移动到数据库,并为该行为添加一个列到db(如布尔列,如果它是可编辑的),并将其映射到状态类而不是枚举。因此,如果引入了新状态,则可以将其添加到具有相应行为的db。

答案 2 :(得分:0)

我同意John Rasch的回答,但您可能对Codeproject关于动态生成枚举的帖子感兴趣

相关问题