У меня есть структура, которая может быть очень легко представлена с использованием трехмерного вложенного словаря, например
private static Dictionary<string, Dictionary<string, Dictionary<string,string>>> PrerenderedTemplates;
Если в структуре может быть что-то вроде этого
PrerenderedTemplates[instanceID][templategroup][templatepart]
Теперь я понимаю, что этот код трудно прочитать, потому что, глядя на инструкцию определения, вы не можете сказать, для чего он используется. Единственное преимущество, которое я могу увидеть при замене на Dictionary<string, PrerenderedTemplate>
, - это читаемость. Преобразование каждого вложения в собственный класс (например, class PrerenderedTemplate{} class TemplateGroup{} class TemplatePart{}
) добавило бы еще много строк кода для небольшого (если такового) вычислительного преимущества. Насколько я могу судить.
- Итак, мой подход "хорошо" или мне нужно пройти лишнюю милю и создать отдельные классы?
- Можно ли описать, как вложенный
Dictionary
работает в документации/комментариях - Есть ли наилучшая практика для обработки такого рода вложенности?
- Имейте в виду, что это частный член, он не должен быть простым для людей, использующих класс.
Обновление
Итак, вдохновленный Резой, но неспособный использовать Tuples, я решил создать свой собственный генератор ключей и реализовать его шаблон следующим образом:
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
.