Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 状态代码设计模式_Design Patterns - Fatal编程技术网

Design patterns 状态代码设计模式

Design patterns 状态代码设计模式,design-patterns,Design Patterns,假设在典型的博客场景中有一个“post”对象。博客文章可以有不同的状态,如“草稿”、“已发布”、“已批准”等。处理此问题的最佳方法是什么,特别是以有意义的方式以及以有意义的代码方式在数据库中存储此数据 一般来说,我看到它们存储为与数据库(本例中为“posts”表)中的一行相关联的int。有时数据库中会有一个查找表来解释这些状态(即id=>1 name=>draft等的状态表)。通常,我会将它们转换为数据访问层中的枚举,以获得更有意义的代码表示,并避免使用“幻数” 但是,此解决方案让开发人员更新两

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

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

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


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

我喜欢设置一个
status\u id
并按照您的建议创建一个包含状态的查找表和相应的枚举


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

IMO,如果您要将草稿映射到代码中的枚举草稿,这可能意味着您要在代码中向草稿添加行为,例如草稿是可编辑的,并基于此做出决策,则它们应该仅位于一个位置。
我在这里的方法是将行为移动到数据库,并为该行为向db添加一列(如布尔列,表示其是否可编辑),并将其映射到status类而不是枚举。因此,如果引入了一个新的状态,它可以通过相应的行为添加到db中

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