Нет причин не делить ваш исходный код на разные каталоги; это имеет смысл, если имеется много файлов и четких логических группировок.
Нет необходимости создавать отдельный файл для каждого небольшого класса - в больших проектах это имеет тенденцию к медленной компиляции (поскольку файлы реализации часто должны включать в себя множество одинаковых заголовков, чтобы скомпилировать их пару десятков строк) .
Помимо использования пространств имен для отражения логических делений в коде, точные пороги, при которых код подразделяется на дополнительные пространства имен, как правило, определяются некоторыми другими силами, например:
- факторов, предполагающих использование большего количества пространств имен
- очень изменчивый код (часто редактируемый, постоянное добавление / изменение идентификатора, часто короткие и / или общие слова)
- больше разработчиков
- факторы, уменьшающие потребность в пространствах имен
- жесткая координация со стороны центрального органа
- запланированные официальные выпуски с тщательными проверками на наличие конфликтов
Пространства имен также можно использовать как способ, позволяющий легко переключаться между альтернативными реализациями (например, различными версиями протокола, поточно-ориентированными и небезопасными функциями поддержки, реализациями, специфичными для ОС), поэтому иногда удовлетворение таких потребностей включает использование Пространства имен.
Определенно может быть болезненно копаться в неинтуитивных и / или глубоко вложенных пространствах имен, чтобы найти нужные вам переменные, и «использование пространства имен» менее эффективно, если вам, вероятно, придется использовать несколько, которые в любом случае определяют одни и те же идентификаторы, но может подходить для более модального кода, который стремится использовать одно или другое пространство имен более интенсивно за один раз.
Итак, вы можете учитывать эти факторы при принятии решения о том, помещать ли код каждой папки (или какую-либо другую логически отличную группу) в разные пространства имен.