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