Все, что может быть локализовано, должно быть в файле ресурсов. Даже если вы на 100% уверены, что вам никогда не понадобится локализация, поскольку строки в файле ресурсов облегчают этот переход.
Таким образом, заголовки, имена, метки графического интерфейса, текст диалога, сообщения об ошибках и т. Д. Принадлежат в формате resx. Сделайте это сейчас. Если / когда ваше приложение нуждается в локализации, будущие разработчики будут вам благодарны.
Теперь другие константы немного сложнее. Я не думаю, что есть жесткое и быстрое правило, но в целом я пытаюсь определить «истинные» константы как константы с настолько малой областью действия, насколько это необходимо. Под истинной константой я подразумеваю что-либо, что вряд ли когда-либо изменится за время существования приложения. Я не люблю использовать файл ресурсов для не локализованных строк, так как он имеет тенденцию нарушать инкапсуляцию. Например, требуемый размер для функции PKDB2 должен быть определен локально. Никто вне криптообъекта не должен знать, что это такое.
Вещи поднимают связанную тему. Все, что в настоящее время является статичным, но может измениться в будущем (даже в будущих версиях приложения), должно быть объявлено только для чтения. Они могут быть загружены с Resx, лично я не. Effectivve C # охватывает это в пункте № 2.
Кроме того, многое зависит от того, чего требует ваша компания / команда. Я был в командах, где ничего не было в файле ресурсов, а также в командах, где все (даже то, что я считал нужным определить локально) хранилось в файле ресурсов. *