Константы лучшие практики

У меня есть простые классы, которые инициализируются со значениями словаря и могут возвращать его значения в качестве словаря, вот пример:

public class ApartmentModel
{
    public int Id { get; set; }

    public string Title { get; set; }

    public ApartmentModel()
    {
    }

    public ApartmentModel(IDictionary<string, object> item)
    {
        Id = (int)item["ID"];
        Title = item["Title"].ToString();           
    }

    public override IDictionary<string, object> FieldsValues()
    {
        var item = new Dictionary<string, object>
        {
            ["ID"] = Id,
            ["Title"] = Title                
        };
        return item;
    }
}

Некоторые классы имеют общие поля, такие как "Id" и "Заголовок". Мне интересно, как лучше хранить строки ключей словаря как константы: в одном классе с частными полями или в файле настроек / ресурсов?

1 ответ

Решение

Похоже, что значения ваших констант соответствуют именам свойств. В подобных ситуациях лучше вообще не использовать строковые литералы, заменяя их на nameof оператор (при условии, что используется язык C# 6)

public ApartmentModel(IDictionary<string, object> item)
{
    Id = (int)item[nameof(Id)];
    Title = item[nameof(Title)].ToString();           
}

public override IDictionary<string, object> FieldsValues()
{
    var item = new Dictionary<string, object>
    {
        [nameof(Id)] = Id,
        [nameof(Title)] = Title                
    };
    return item;
}

Еще лучший подход - не кодировать эти методы напрямую, заменив их одним методом, основанным на отражении и пользовательских атрибутах. Определите атрибут, который обозначает свойство для включения в FieldsValues - генерируется IDIctionaryи написать единственный вспомогательный метод, который обходит иерархию классов вашего объекта, находит все атрибуты с настраиваемым атрибутом и создает / использует словарь на их основе.

Другие вопросы по тегам