gpt4 book ai didi

asp.net-mvc - 为云中的 asp.net MVC 应用程序使用枚举或数据库查找表或两者的最佳实践/设计决策是什么?

转载 作者:行者123 更新时间:2023-12-04 14:14:00 26 4
gpt4 key购买 nike

我正在编写一个 Asp.net MVC 应用程序,但我不确定设计决策。
我不确定最好的设计是使用枚举值还是将这些值存储为数据库中的查找表。我可以想象查找表适用于所有这些查询都不是问题的 Windows 应用程序,但对于在云中运行的使用关系数据库的高流量 Web 应用程序,我不太确定。

应用程序需要可维护,并且将来需要支持多语言。
其他开发人员将不得不在系统上工作,所以我需要设计正确且易于维护。

我目前使用枚举作为值
通知方法(无,电子邮件,短信),
性别(男、女)
订单状态(打开、关闭、进行中、交付进行中
PaymentService(现金、银行转账、Paypal、GoogleWallet)

枚举适合我,因为代码中存在与枚举相关联的业务规则,并且使用枚举值而不是字符串的业务规则使应用程序更具可读性且不易出错。

但是以上不适合以下场景。
我的 Web 前端有一个选择/下拉控件。要填充下拉列表,我有以下代码

  var paymentServices=
Enum.GetValues(typeof(PaymentService))
.Cast<PaymentService >()
.Select(d => new SelectListItem()
{
Text = d.ToString(),
Value = ((int)d).ToString()
}).ToList();

我想显示电子邮件而不是枚举值电子邮件,并且我希望单词之间有空格。

所以我最终使用属性并在 EnumHelper 类中使用静态方法来读取属性,如 here 所述。

我的 order 和 Preference db 表我每个表都有大约 20 个这样的枚举。

对于我的情况,最好的做法是
  • 仅使用带有枚举属性的 C# 枚举来显示友好名称、描述、工具提示等值。
  • 只需使用数据库查找表。
    缺点是业务规则必须基于查找表中所选值的字符串值。
    要转到我的首选项或订单编辑屏幕,我必须分别读取数据库中的 20 个查找表才能呈现下拉控件。
    这使得编写代码和报告变得更加容易,但系统将承受沉重的负载(系统有数千个用户)
  • 为业务规则设置简单的枚举值,并使用匹配的查找数据库表并在这些表中存储要在前端 UI 上显示的附加显示列。
    缺点是我必须保持基本的枚举编号与数据库查找表同步。

  • 我如何决定最佳设计决策或有更好的解决方案?

    最佳答案

    Have simple enums values for business rules and use matching lookup database tables and store in those tables the additional display columns to show on the frontend UI. The disadvantage is I have to keep the basic enum numbering in sync with the database lookup tables.



    您可以研究 T4 模板,这意味着您的应用程序中的枚举是半自动从数据库中的查找表构建的。 (您可以从构建菜单中选择一个选项来重新创建所有这些。)我们目前在工作中的一个大型项目中执行此操作,并且效果很好。

    当然,好处是您不必在应用程序中使用魔数(Magic Number)或手动保持同步。外键和强类型代码,双赢。

    这似乎相关: SQL Table and C# Enumeration

    为了扩展这一点,我们还使用反射来获取枚举的 DisplayValue 属性。但是,仅仅因为我们这样做并不能使其成为最佳实践。我们在客户端机器上运行,而不是在云中,因此反射不是一个大问题。我不知道当您有多个用户从一台机器提供页面时,这种反射会有多大。也就是说,Microsoft 在使用 HTML Helpers 时充分利用了反射,反射可能比访问数据库快 20 次。但我离题了...

    关于asp.net-mvc - 为云中的 asp.net MVC 应用程序使用枚举或数据库查找表或两者的最佳实践/设计决策是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18907260/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com