Большинство (все?) Языков с пространствами имен имеют тенденцию быть объектно-ориентированными. Во многих случаях подходит удобочитаемое имя для типа, даже если существует несколько несовместимых реализаций. (это поднимает другие проблемы по объектно-ориентированному повторному использованию, но это не тот вопрос). Например, в Java у вас есть Timer, который используется для фоновых задач пользовательского интерфейса, и Timer, который используется для фоновых приложений (не привязанных к AWT / Swing). Пространство имен позволяет вам иметь эти одноименные объекты, живущие в разных под-API.
Причина появления пространств имен была связана с необоснованной задачей предугадывать, как другие разработчики будут называть свои объекты. C ++ ввел эту концепцию (или, по крайней мере, был первым языком, с которым я познакомился с этой концепцией), и он был полезен, даже несмотря на то, что не было руководящих принципов по наилучшему использованию. Java адаптировала концепцию и добавила некоторые «лучшие практики», которые включали название вашей компании в пространство имен. Таким образом, вам нужно было беспокоиться только о своей собственной компании.
Префикс может стать довольно грязным. Когда вы применяете это? Когда ты не применяешь это? Получают ли префиксы структуры / классы / глобальные методы? Как насчет методов? Как насчет свойств в структуре. Я видел все эти вещи в коде, хотя, к счастью, не все сразу. Пространства имен обеспечивают некоторую предсказуемость для всех этих вопросов и делают его языковой функцией, а не личной «лучшей практикой».
using
конкретным пространством имен, и тогда вам не нужно ставить префикс в начале идентификаторов в этом пространстве имен.