То, что вы делаете, не так уж плохо - вы делитесь своими константами в одном легко изменяемом месте, что очень хорошая идея.
Использование одной структуры GlobalStrings также неплохо, если строки в этом месте действительно глобальны (используются во многих местах в вашей программе). Однако обычно это не так (за исключением действительно глобального текста, например, ApplicationName и Publisher).
Строки обычно используются в более локализованной части вашего приложения (например, в подсистеме). Вы могли бы рассмотреть возможность использования другой структуры simlar для «глобалов» только для этой подсистемы. Если строки нужны только в пределах одного класса или иерархии классов, рассмотрите возможность помещения их в базовый класс. Если вы поместите каждую из ваших «глобальных» строк в класс, к которому она больше всего относится, это поможет классифицировать и связать константы с областью, в которой они применимы. Таким образом, если «нулевой текст по умолчанию» фактически применяется только к данным, которые вы извлекаете с помощью класса «DataAccess» и пользователей этого класса, то подумайте о добавлении его в качестве открытого const / свойства класса DataAccess, чтобы клиенты этого класса могли получить к нему доступ. «глобальный» как DataAccess.DefaultNullString - это делает более понятным для других программистов использование этой константы.
Включая константы в класс, они технически все еще доступны «глобально», но не являются «глобальными» в злом смысле («здесь константа, но я понятия не имею, где в программе она применяется»)
Вы обнаружите, что если вы таким образом встраиваете свои константы в разные классы / подсистемы, ваша структура GlobalStrings станет очень маленькой или даже пустой.