我有一个可以使用三深嵌套的字典中很容易表示的结构,像这样深层嵌套字典是反模式吗?
private static Dictionary<string, Dictionary<string, Dictionary<string,string>>> PrerenderedTemplates;
凡结构可用于这样的事情
PrerenderedTemplates[instanceID][templategroup][templatepart]
现在,我才知道这段代码很难阅读,因为从查看定义语句,你不能说出它的用途。我可以真正看到将其更改为Dictionary<string, PrerenderedTemplate>
的唯一优点是可读性。将每个嵌套转换为它自己的类(例如class PrerenderedTemplate{} class TemplateGroup{} class TemplatePart{}
)会为很少(如果有的话)计算优势添加更多的代码行。据我所见。
- 那么,我的方法是“好的”,还是应该多走一步并创建单独的课程?
- 可以包括嵌套的
Dictionary
如何在文档/注释中工作 - 是否有处理这种嵌套的最佳做法?
- 请记住,这是一名私人会员,对于使用该课程的人而言,并不需要简单。
更新
因此,由礼启发,但无法使用元组,我决定创建自己的密钥生成器和执行他的模式是这样的:
private Dictionary<string, string> PrerenderedTemplates;
private string GetPrerenderedTemplateKey(string InstanceId, string FeatureId, string OptionId)
{
return new StringBuilder(instanceId)
.Append(FormatTools.LIST_ENTRY_DELIMITER)
.Append(templategroup)
.Append(FormatTools.LIST_ENTRY_DELIMITER)
.Append(templatepart).ToString();
}
哪里FormatTools.LIST_ENTRY_DELIMITER
是Unicode专用字符0xe04d
。
由于前两个嵌套基本上只是标识符,或许我可以摆脱一个简单的词典<字符串,字符串>。因此'PrerenderedTemplates [“instance1”] [“fruit”] [“banana”]'可以表示为'PrerenderedTemplates [“instance1_fruit_banana”]',就像一个名字空间。 – 2012-02-16 00:46:28
您是否需要使用'PrerenderedTemplates'来列出您的模板组或模板部件? PrerenderedTemplates [instanceID] .Keys'或'PrerenderedTemplates [instanceID] [templateGroup]'的方式排序?如果是这样,那么这可能是最简单的方法来处理它。 – 2012-02-16 00:48:23
@ M.Babcock,好吧,我正在循环包含指向如何呈现模板的元数据的对象集合。在渲染该模板之前,我想检查我的字典以确保它之前未被渲染。如果没有,我将它渲染并将结果添加到我的词典中。 (在其他地方处理模板更改管理) – 2012-02-16 00:55:25