我正在编写一个 Asp.net MVC 应用程序,但我不确定设计决策。我不确定最好的设计是使用枚举值还是将这些值作为查找表存储在数据库中。我可以想象查找表对于所有这些查询都不是问题的 Windows 应用程序很好,但对于在云中运行的使用关系数据库的高流量 Web 应用程序我不太确定。
应用程序需要可维护,并且将来需要支持多语言。其他开发人员将不得不在系统上工作,因此我需要设计正确且易于维护。
我目前将枚举用于 NotificationMethod(无,电子邮件,Sms),
性别(男性,女性)OrderStatus(打开,关闭,InProgres,DeliveryInProgress PaymentService(现金,BankTransfer,Paypal,GoogleWallet)等值
枚举适合我,因为代码中有业务规则链接到枚举,并且具有枚举值而不是字符串的业务规则使应用程序更具可读性并且不易出错。
但是,上述情况不适用于以下情况。我的网络前端有一个选择/下拉控件。要填充下拉列表,我有以下代码
var paymentServices=
Enum.GetValues(typeof(PaymentService))
.Cast<PaymentService >()
.Select(d => new SelectListItem()
{
Text = d.ToString(),
Value = ((int)d).ToString()
}).ToList();
而不是枚举值 Email 我想显示 E-Mail 并且我想要单词之间的空格。
所以我最终使用属性并在 EnumHelper 类中使用静态方法来读取这里描述的属性
我的 order 和 Preference db 表每个表我有大约 20 个这样的枚举。
对于我的情况,最好的做法是
仅使用具有枚举属性的 C# 枚举来显示值,如 FriendlyNames、Description、Tooltip。
只需使用数据库查找表。缺点是业务规则必须基于查找表中所选值的字符串值。要进入我的偏好或订单编辑屏幕,我必须分别读取数据库中的 20 个查找表才能呈现下拉控件。这使得编写代码和报告变得更加容易,但系统将承受重负载(系统有成千上万的用户)
为业务规则提供简单的枚举值,并使用匹配的查找数据库表,并在这些表中存储额外的显示列以在前端 UI 上显示。缺点是我必须保持基本枚举编号与数据库查找表同步。
你如何决定最好的设计决策或有更好的解决方案?