Я записал об этом несколько недель назад и пришел к выводу, что XML является одной из наиболее широко используемых нотаций.
действительно ли это является лучшим? Я не думаю так, я действительно как JSON, но инструменты все еще не до XML, таким образом, я предполагаю, что мы должны ожидать и видеть.
Вы, вероятно, могли бы иметь их в статическом классе со статическими свойствами только для чтения.
public static class Routes
{
public static string SignUp => "signup";
}
IMO, использующий класс, полный констант, подходит для констант. Если они будут время от времени меняться, я рекомендую вместо этого использовать AppSettings в вашей конфигурации и в классе ConfigurationManager.
Когда у меня есть «константы», которые фактически извлекаются из AppSettings или аналогичных, у меня всегда будет класс «констант», который обертывает чтение из диспетчера конфигурации. Всегда более целесообразно иметь Constants.SomeModule.Setting
вместо того, чтобы напрямую обращаться к ConfigurationManager.AppSettings ["SomeModule / Setting"]
в любом месте, где требуется использовать указанное значение параметра .
Бонусные баллы за эту настройку, поскольку SomeModule
скорее всего будет вложенным классом внутри файла констант, вы можете легко использовать Dependency Injection, чтобы внедрить SomeModule
непосредственно в классы, которые от него зависят. Вы также можете даже извлечь интерфейс поверх SomeModule
, а затем создать зависимость от ISomeModuleConfiguration
в вашем коде потребления, тогда это позволит вам отделить зависимость от файлов констант и даже потенциально может упростить тестирование, особенно если эти параметры поступают из AppSettings и вы изменяете их с помощью преобразований конфигурации, поскольку параметры зависят от среды.
Что мне нравится делать, так это следующее (но обязательно прочитайте до конца, чтобы использовать правильный тип констант ):
internal static class ColumnKeys
{
internal const string Date = "Date";
internal const string Value = "Value";
...
}
Прочтите это чтобы узнать, почему const
может быть не тем, что вам нужно. Возможные типы констант :
const
поля. Не используйте в разных сборках ( общедоступный
или защищенный
), если значение может измениться в будущем, потому что это значение будет жестко закодировано во время компиляции в этих других сборках. Если вы измените значение, старое значение будет использоваться другими сборками до их повторной компиляции. статическое только для чтения
поля статическое
свойство без набора
Это лучший способ ИМО. Нет необходимости в свойствах или только для чтения:
public static class Constants
{
public const string SomeConstant = "Some value";
}
Подходит пустой статический класс. Подумайте об использовании нескольких классов, чтобы получить хорошие группы связанных констант, а не один гигантский файл Globals.cs.
Кроме того, для некоторых констант типа int рассмотрите обозначение:
[Flags]
enum Foo
{
}
Поскольку это позволяет обработка значений как флагов .
Еще одно голосование за использование web.config или app.config. Конфигурационные файлы - хорошее место для констант, таких как строки подключения и т. Д. Я предпочитаю не смотреть в исходный код, чтобы просматривать или изменять такие вещи. Статический класс, который считывает эти константы из файла .config, может быть хорошим компромиссом, поскольку он позволит вашему приложению получать доступ к этим ресурсам, как если бы они были определены в коде, но все же дает вам гибкость, позволяя им легко просматривать / редактировать космос.
Да, статический класс
для хранения констант вполне подойдет, за исключением констант, связанных с определенными типами.
Если эти Константы являются ссылками на службы или переключателями, которые влияют на поведение приложения, я бы установил их как пользовательские настройки приложения. Таким образом, если их нужно изменить, вам не нужно перекомпилировать, и вы все равно можете ссылаться на них через класс статических свойств.
Properties.Settings.Default.ServiceRef