Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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
C# 更可取的是:枚举还是单例_C#_Enums_Singleton - Fatal编程技术网

C# 更可取的是:枚举还是单例

C# 更可取的是:枚举还是单例,c#,enums,singleton,C#,Enums,Singleton,我有以下问题: 在代码、枚举或单例中使用状态的首选方式是什么 我在数据库中存储了状态值及其ID。如果de DB中的状态发生更改,则还需要对代码进行一些更改 根据惯例,现在有人更喜欢什么吗 我一直在网上查找,但找不到明确的答案。这部分取决于您的状态ID是否有保证值,或者每个数据库的ID是否可以更改(通过标识)。就我个人而言,对于状态,我更喜欢fixed(它给了您最大的灵活性和最少的开销),您可以选择使用枚举(或者如果更方便的话,可以使用一些常量),并且您不必添加间接寻址,即“获取打开的id” 但是

我有以下问题:

在代码、枚举或单例中使用状态的首选方式是什么

我在数据库中存储了状态值及其ID。如果de DB中的状态发生更改,则还需要对代码进行一些更改

根据惯例,现在有人更喜欢什么吗


我一直在网上查找,但找不到明确的答案。

这部分取决于您的状态ID是否有保证值,或者每个数据库的ID是否可以更改(通过
标识
)。就我个人而言,对于状态,我更喜欢fixed(它给了您最大的灵活性和最少的开销),您可以选择使用枚举(或者如果更方便的话,可以使用一些常量),并且您不必添加间接寻址,即“获取
打开的id

但是,这并不总是可能的,如果不可能,那么缓存和重用它们(以避免在查找过程中碰到数据库)仍然是非常有用的。但是,我会避免使用单例,尤其是因为如果您需要与多个数据库进行通信,那么单例将无法很好地发挥作用——每个数据库中的ID都可能不同。但是,任何合适的缓存实现(或者可能是IoC/DI)都应该允许您存储适当的数据(可能是某种字典)。如果你喜欢测试等,单身汉通常也会有点痛苦

但是:枚举和固定id值要简单得多


请注意,在任何实现中,更改状态列表都是一项非常重要的操作,尤其是它将是一次大的
更新(如果您是非规范化的,则会有几次更新)。

如果您打算在整个应用程序中使用状态并在整个应用程序中进行标准化,那么它最适合
枚举

Enum Status
{Open, Pending, Closed, Deferred}

这也使代码更具可读性

什么是“单例枚举”?我不确定我是否理解这个问题。什么是“单例枚举”?如果你的意思是“枚举或单例”,仍然没有意义。枚举是用于定义命名常量集的值类型。singleton是一种模式,您可以在其中定义某个对象的一个实例以供整个应用程序使用。它是关于我的状态的。如果状态存储在数据库中,我可以使用相同的值创建枚举类,或者使用singleton从数据库中检索值并使其可用。如何从“什么是单例枚举”比“什么是单例枚举或单例枚举”更受欢迎,感谢您更改标题好的,这比您原来的问题更有意义。值可能会更改多久?如果没有,请使用常量。如果它们要定期更改,请从db和“缓存”中获取它们“在他们改变之前,把他们带到某个地方。我之所以说带引号的缓存,是因为您没有说这是什么类型的应用程序(web/windows/silverlight等)