我想知道您的开发商店或项目中用于处理查找值的协议是什么,例如世界各国或美利坚合众国的州。
我已经看到它以两种不同的方式完成:在我工作的一个地方,我们的查找都存储在带有前缀“L_”的数据库表中,并具有以下列:id、code、desc、ordersequence。因此,例如,对于世界各国,我们将有一个如下表格:
CREATE TABLE L_Countries(
CountryID INT IDENTITY(1,1) PRIMARY KEY,
CountryCode VARCHAR(10) NOT NULL,
CountryDesc VARCHAR(50) NOT NULL,
OrderSequence INT NULL
)
最近,我看到了一个将查找烘焙到枚举中的示例,例如:
enum Countries
{
Croatia = 1,
Slovenia = 2,
Serbia = 3,
// and so on
}
如果这些来自数据库表,则有一个实用程序可以为枚举生成 C# 代码。否则,有人只是花时间使用值不可能更改的假设对所有条目进行硬编码。对于枚举中的数值,如果存在,则根据数据库中相应查找表中的 ID 列进行硬编码,或者仅根据从 1 开始的条目进行硬编码。
无可否认,我赞成前一种方法的论点是,它非常灵活,可以选择使用代码或完整描述、操纵顺序和进行更改而无需重新编译。尽管从它们生成代码的选项是可能的,但一个很大的优势是它们在降级到数据库时仍然是真正的“查找”。最后,它们的使用方式很灵活:作为 Dictionary 集合中的值或使用服务器端代码生成 ASP.NET ListItems 或 html 组合框元素。
我听到的关于后者的论点是值不会改变,并且即使它们在应用程序级别缓存,也必须从数据库中检索查找值存在开销。通过对它们进行硬编码或生成枚举,它们可以在没有数据库检索的情况下使用。
我的问题如下:
哪个选项对您更有意义,或者,如果您的答案是“视情况而定”,您能否给出硬编码枚举优于跨整个应用程序的数据库查找的场景?
您还见过其他处理查找的优雅解决方案吗?我曾在一个应用程序中工作,其中所有查找都有一个表(它包括一个“查找名称”列)作为示例。您的替代方法与上述两种方法相比如何?