我正在尝试为(我会考虑的)一个有点复杂的类提出一个好的模型。有两个相互独立的实体(因为它们在应用程序的其他地方单独使用)、一个用户组和一个事件类型。
用户组有一个他们有权使用的事件类型列表。除此之外,还有一个字符串列表适用于用户组和事件的每个组合,它告诉应用程序字符串稍后替换(因此字典,其中键是要替换的字段,值是替换它的值与)。
我更多的是 SQL 背景,所以我很容易从表和主键的角度来思考。此结构将关闭 UserGroupID, EventTypeID, NameToReplace
,但是当我尝试想出一种在 C# 中实现它的方法时,我最终得到了丑陋的(或者至少我认为它们是丑陋的)结构,如 Dictionary<int, Dictionary<tuple<int, string>, string>>
或 Dictionary<int, Dictionary<int, Dictionary<string, string>>>
我也可以放弃字典的概念,只制作一个元组列表,或者一个将所有逻辑“键”联系在一起的自定义类列表。
我的问题归结为,这种嵌套集合结构是否常见和/或一个好主意?任何人都可以向我指出对此类数据进行建模时的最佳做法吗?
提前致谢!
最佳答案
因此,这可能会引起争议,但我想将此版本发布以供讨论,以了解这种方法的适用性。
假设您没有数以百万计的组和事件类型,您可以将它们打包到数据库术语中的复合键中,并进行位移:
public static int Combine(int value1, int value2)
{
return value1 | (value2 << 8);
}
然后 Dictionary<int, string>
会很好。
dictionary.Add(Combine(UserGroupID, EventTypeID), NameToReplace)
并获取值:
dictionary[Combine(UserGroupID, EventTypeID)] // Or TryGetValue()
关于c# - 在 C# 中建模数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37683659/