очень длинные имена констант
Это грубая разновидность, но, по крайней мере, ее можно обнаружить.Весь ваш код будет находиться в одном и том же месте, поэтому у вас не будет проблем с его поиском.
Я считаю, что вложенные классы - хороший способ сделать это, но некоторые правила stylecop / fxcop запрещают это, поэтомув некотором смысле это должно быть "плохо"
Одна из причин, по которой это плохо, заключается в том, что с инструментами автоматической генерации кода / проверки кода сложнее работать.Другая причина в том, что их труднее обнаружить с помощью Intellisense.
Самая важная причина, по которой это плохо, заключается в том, что вложенный класс должен быть прочно связан в объектно-ориентированном смысле зависимости, чтобы макет имел смысл логически.Во всех, кроме некоторых редких случаев (например, классы перечислителя ), это не имеет смысла.В вашем случае это также не имеет смысла, потому что ваши классы вообще не имеют никакого поведения или объектной ориентации - это просто иерархия констант.
Пространства имен
Для описанной вами проблемы это лучший способ ее решить.Вы получаете наименьший беспорядок на уровне, и вы получаете Intellisense при наборе текста, чтобы вы могли видеть, к чему вы сужаетесь, спускаясь по иерархии.
Имхо, он создает массу папок и файлов, которыекаждый из них почти ничего не содержит
Если вам действительно нужен огромный пул констант, и нет смысла связывать их с другими частями вашего приложения, то это один из редких случаев, когда язлоупотребляли правилами «один файл на класс» и «одна папка на пространство имен».Единственная причина, по которой вы даже встраиваете их в классы, заключается в том, что .Net не поддерживает глобальные переменные.
Еще одно предложение
Есть ли у вас домен-специфичные объекты, к которым вместо этого относятся эти константы?Например, есть ли логика, связанная с классом System3 / Rules / Rule7
?Разве это не какое-то действительное бизнес-правило, которое вы должны воплотить в своем собственном классе?
Если вы можете расположить свой код так, чтобы у вас была более толстая модель домена , то самое логичное местопоместить ваши константы в классы, которые воплощают соответствующую доменную логику.
Если нет смысла иметь толстый домен, у вас есть полностью универсальная обработка правил, и вы полагаетесь на константы для подачи своихлогика бизнес-движка, то есть приложение, управляемое данными.Это означает, что вы должны хранить свои данные в файлах конфигурации, а не в коде.