应该在代码中的什么位置保存不变的数据?

2024-03-29

我已经根据数据库中的表定义了模型。现在有一些模型的数据几乎没有变化。例如,电子商务网站销售的产品类别、产品发货城市等。这些不会经常更改,因此为了避免影响数据库,目前将它们保存为静态变量。

问题是这些静态变量应该位于代码中的哪个位置。目前,在 ProductCategory 类(也是模型表示)中定义了一个静态列表,如果为空,则调用数据库并加载产品类别。同样,City类也有类似的静态List等。

然后,这些静态列表将在整个应用程序中使用。我正在考虑创建一个名为 StaticData 的类,然后将所有静态列表保留在该类中。那是现在而不是

ProductCategory.AllCategories.Find(p => p.Id = 2) 

我将有

StaticData.AllProductCategories.Find(p => p.Id = 2) 

您认为哪种方法更好?我的目标还在于可测试性和解耦代码。

另外,有没有更好的方法来实现这些?你如何在代码中做类似的事情?


如果它足够静态,可以编译到您的代码中,并且never必须在运行时更改,您可以使用静态类,例如参见常见模式将枚举转变为类 http://sarahtaraporewalla.com/design/coding-tip-42-turning-enums-into-classes/.

类似的东西可能在您的场景中效果很好:

public class Vehicle
{
    public static Vehicle Car = new Vehicle("Car");
    public static Vehicle MotorBike = new Vehicle("MotorBike");
    public static Vehicle PeopleMover = new Vehicle("PeopleMover");

    private Vehicle(string name)
    {
        this.name = name
    }
    private string name;
}

使用枚举或具有此类静态成员的类应该可以帮助您摆脱代码中那些令人讨厌的魔术数字,但由于语法不正确(缺少一个=)我假设这只是示例代码,看起来与真实代码库中的任何内容都不相同。

如果有时确实发生更改,并且您希望在数据库中包含类别列表,则可以将它们紧密缓存(就像几乎永不过期,但在更新时手动使其失效)。根据类别列表的大小,我会考虑将整个集合放入一个大缓存中,并查询缓存对象中的各个类别,而不是为每个类别保留一个单独的缓存条目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应该在代码中的什么位置保存不变的数据? 的相关文章

  • Asp.net MVC 路由 - 防止通过约束路由到 XML 文件

    我正在尝试找到一种方法来阻止用户访问特定的 xml 文件 我尝试过做 routes MapRoute SiteMap SiteMap siteMap xml new new isLocal new LocalHostRouteConstra
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 按成员序列化

    我已经实现了template
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 服务器不支持 C# 中的安全连接

    我在下面的代码中收到错误 服务器不支持安全连接 SmtpClient smtp new SmtpClient MailMessage mail new MailMessage mail From new MailAddress gmail
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 使用 pyqtgraph 有效地绘制大型数据集

    我正在尝试使用 pyqtgraph 生成散点图和直方图矩阵 每个散点图的输入 x 和 y 值 是长度大于 1 000 000 的 numpy 数组 生成这些图需要很长时间 2x2 绘图矩阵 gt 1 分钟 matplotlib 实际上生成相
  • ModuleNotFoundError:使用tensorflow 2.6时没有名为“keras”的模块

    我创建了一个新的 conda 环境 conda create name tf tensorflow 2 6 并尝试编译 import tensorflow as tf model tf keras models Sequential 导致
  • 如何设置组合框宽度以适合最大的项目

    我希望我的ComboBox必须适应其width到最长的String Item我的清单中 代码示例 ComboBox model Banana Apple ThisIsTheLongestWordThatIHave Coconut 知道如何做
  • Android 中写入锁定文件

    我将一些数据存储在 SD 卡上的文件上 并从不同的线程读取相同的文件 为了避免读取和写入的竞争条件 我想在两种情况下锁定文件 读取和写入 我心里有两个选择 1 我可以使用同步来做到这一点 2 我可以使用文件锁来做到这一点 我应该选择哪一个
  • 批量插入 mysql - 我可以使用忽略子句吗?有限制吗?批量插入的记录?

    我有一堆数据想要插入 我决定对 mysql 使用批量插入 插入朋友 请求者 好友 值 value1 value2 value2 value1 value3 value4 value4 value3 我想了解以下信息 1 我可以使用忽略吗 例
  • Json允许错误

    这个错误在我们的 MVC 应用程序中随机出现 有时做同样的事情不会 有时却会 有谁知道这是否与任何可以简单解决的问题有关 或者这是否是你们很多人都见过的常见现象 System InvalidOperationException This r
  • 注册 COM 互操作

    当选中构建属性中的 Register for COM Interop 选项时 出现错误 无法注册程序集访问 被拒绝 取消选中该选项时 项目构建时不会出现任何错误 但我的要求是注册 COM 对象 因为我需要在 VB 中使用相同的对象 谁能帮我
  • 与 WPF 和数据绑定一起使用的简单 CRUD

    我是用于 Windows 应用程序开发的 WPF 新手 只是想先将其介绍一下 我正在使用 Visual Studio 2010 和 NET Framework 4 0 我正在开发一个相当简单的管理工具 为了简单起见 假设我正在处理员工数据
  • 全屏嵌入 Bing 地图

    有人知道是否可以全屏嵌入 bing 地图吗 这样地图就可以始终填充背景并简单地在顶部覆盖一些元素 我似乎无法用 100 iframe 实现这一点 而且 bing 的帮助也没有那么有帮助 谢谢 如果我没理解错的话 你想要实现让地图填满整个屏幕
  • C11 结构继承与匿名结构

    I saw this way https stackoverflow com a 14523823 108802实施某种struct匿名继承struct在C11中 想尝试一下 这是我所拥有的 struct struct a int aa s
  • R - 查找行中的所有重复项并替换

    我有一个大数据框 正在尝试查找一行中的重复元素 然后用空字符串替换所有重复值 X1 X2 X3 X4 X5 x 1 2 3 3 4 y 1 1 2 3 4 应该成为 X1 X2 X3 X4 X5 x 1 2 4 y 2 3 4 我可以在单个
  • Cython:将扩展类型序列作为另一个扩展类型的属性,可以访问 cdef 方法

    假设我定义了以下 Cython 类 cdef class Kernel cdef readonly double a def init self double a self a a cdef public double GetValue s
  • JDBI中如何动态绑定表名

    我尝试使用 SELECT COUNT FROM TableName 在 JDBI 中我使用了 bind Tablename MyTable 结果始终在单引号内 SELECT COUNT FROM MyTable 有没有正确的方法来参数化类似
  • 如何通信两个独立的python进程?

    我有两个 python 程序 我想对它们进行通信 它们都是系统服务 都不是由父进程 fork 的 有没有什么方法可以在不使用套接字的情况下做到这一点 例如 通过创建一些队列 gt 序列化它 gt 由其他进程反序列化并执行通信 或者写入执行通
  • Servlet 在某些点击或时间后停止在 Tomcat 服务器上工作

    我的一些 servlet 遇到了一个非常奇怪的问题 下面是我的配置 文件夹 A 在 Tomcat 目录中部署了 X 个 servlet 文件夹 B 在 Tomcat 目录中部署了 Y 个 servlet 经过一定时间或点击文件夹 B 中的任
  • GCC预处理,内置和命令行是做什么用的?

    我很好奇 GCC 预处理步骤的输出 更准确地说 以下两行的目的是什么 1
  • TFIDF 计算混淆

    我在网上找到了以下计算TFIDF的代码 https github com timtrueman tf idf blob master tf idf py 我在函数 def idf word documentList 中添加了 1 这样我就不
  • 最长已排序子序列的长度

    我的未排序数组是 string a new string 10 22 9 33 21 50 41 60 80 在这个数组中 10 22 33 50 60 80按升序排列 所以输出必须是6 一般来说 我想要由数组元素组成并从第一个元素开始的升
  • 将列表绑定到数据源

    我希望能够将列表绑定到列表框数据源 并且当修改列表时 列表框的 UI 会自动更新 Winform 不是 ASP 这是一个示例 private List
  • 应该在代码中的什么位置保存不变的数据?

    我已经根据数据库中的表定义了模型 现在有一些模型的数据几乎没有变化 例如 电子商务网站销售的产品类别 产品发货城市等 这些不会经常更改 因此为了避免影响数据库 目前将它们保存为静态变量 问题是这些静态变量应该位于代码中的哪个位置 目前 在