Немає.
Я спробував обидва методи для малих і великих проектів, як з одиночним (мені), так і з командою розробників.
Я виявив, що найпростішим та найпродуктивнішим маршрутом було створення єдиного простору імен на проект, і всі класи переходять у цей простір імен. Тоді ви можете розмістити файли класу в папки, які ви хочете. Немає сумніву в тому, що весь час додавати використання операторів у верхній частині файлів, оскільки існує лише одна область імен.
Важливо організувати вихідні файли в папки, і, на мою думку, для цього потрібно використовувати всі папки. Потрібна необхідність, щоб ці папки також відображалися в просторах імен, не потрібна, створює більше роботи, і я виявив, що насправді шкідливо для організації, оскільки додаткове навантаження сприяє дезорганізації.
Візьмемо для прикладу це попередження FxCop:
CA1020: Уникайте просторів імен з кількома типами
причин: Простір імен, крім глобальної простори імен, містить менше п'яти типів
https://msdn.microsoft.com/en-gb/library/ms182130.aspx
Це застереження заохочує скидання нових файлів у загальну папку Project.General або навіть корінь проекту, поки у вас є чотири подібних класи для обгрунтування створення нової папки. Чи станеться це коли-небудь?
Пошук файлів
У прийнятій відповіді сказано: "Класи буде легше знайти, і лише вони повинні бути достатньо добрими причинами".
Я підозрюю, що відповідь має на увазі наявність декількох просторів імен у проекті, які не відображають структуру папок, а не те, що я пропоную, це проект з єдиним простором імен.
У будь-якому випадку, поки ви не можете визначити, в якій папці знаходиться клас класу з простору імен, ви можете знайти його за допомогою Go To Definition або вікна пошуку рішень пошуку в Visual Studio. Також, на мою думку, це насправді не велика проблема. Я не витрачаю навіть 0,1% свого часу на розробку проблеми пошуку файлів, щоб виправдати її оптимізацію.
Назва сутичок
Звичайно створення декількох просторів імен дозволяє проекту мати два класи з однаковою назвою. Але це справді гарна річ? Може, простіше просто заборонити це неможливо? Дозвіл двох класів з однаковою назвою створює більш складну ситуацію, коли 90% часу речі працюють певним чином, а потім раптом ви виявите, що у вас є особливий випадок. Скажімо, у вас є два класи прямокутника, визначені в окремих просторах імен:
- клас Project1.Image.Rectangle
- клас Project1.Window.Rectangle
Можна вирішити проблему, необхідна для вихідного файлу обох просторів імен. Тепер ви повинні виписати повний простір імен скрізь у цьому файлі:
var rectangle = new Project1.Window.Rectangle();
Або возитися з якоюсь бридкою допомогою оператора:
using Rectangle = Project1.Window.Rectangle;
Маючи єдиний простір імен у вашому проекті, ви змушені придумувати різні, і я можу стверджувати, більш описові такі назви:
- клас Project1.ImageRectangle
- клас Project1.WindowRectangle
І використання скрізь однакове, вам не доведеться мати справу з особливим випадком, коли файл використовує обидва типи.
використовуючи заяви
using Project1.General;
using Project1.Image;
using Project1.Window;
using Project1.Window.Controls;
using Project1.Shapes;
using Project1.Input;
using Project1.Data;
проти
using Project1;
Простота відсутності простору додавання просторів імен під час написання коду. Це не час, який потрібно насправді, це перерва в потоці необхідності це робити і просто заповнення файлів з великою кількістю використання операторів - для чого? Чи варто того?
Зміна структури папки проекту
Якщо папки відображаються у просторах імен, то шлях до папки проекту ефективно кодується у кожному вихідному файлі. Це означає, що будь-яке перейменування або переміщення файлу чи папки в проекті вимагає змінити фактичний вміст файлу. Як оголошення простору імен файлів у цій папці, так і використання операторів у цілій купі інших файлів, що посилаються на класи в цій папці. Хоча самі зміни тривіальні за допомогою інструментарію, зазвичай це призводить до великої комісії, що складається з багатьох файлів, класи яких навіть не змінилися.
За допомогою єдиного простору імен в проекті ви можете змінювати структуру папок проекту, але хочете, без жодних вихідних файлів.
Visual Studio автоматично відображає простір імен нового файлу в папку проекту, в якій він створений
Невдало, але я вважаю, що клопоту з виправленням простору імен менше, ніж клопоту поводження з ними. Крім того, я звик копіювати вставлення наявного файлу, а не використовувати Add-> New.
Інтернет-браузер та браузер об'єктів
На мою думку, найбільша перевага використання декількох просторів імен у великих проектах - це надання додаткової організації при перегляді класів у будь-якому інструменті, який відображає класи в ієрархії просторів імен. Навіть документація. Очевидно, що лише один простір імен у проекті призводить до того, що всі класи відображатимуться в одному списку, а не розбиваються на категорії. Однак особисто я ніколи не заїжджав і не затримувався через відсутність цього, тому я не вважаю це достатньо великою користю для виправдання кількох просторів імен.
Хоча якби я писав велику бібліотеку публічного класу, я , ймовірно, використовував би декілька просторів імен у проекті, щоб збірка виглядала акуратно в інструментах та документації.