Должны папки в решении соответствовать пространству имен?
В одном из моих проектов команд у нас есть библиотека классов, у которой есть много подпапок в проекте.
Название проекта и пространство имен: 'MyCompany. Проект. Раздел'.
В рамках этого проекта есть несколько папок, которые соответствуют разделу пространства имен:
В этом том же проекте, другая папка жулика
Есть несколько случаев как это, где папки сделаны для " организационный convenience".
Мой вопрос: What' s стандарт? В библиотеках классов папки обычно соответствуют структуре пространства имен, или действительно ли это - ассортимент?
Кроме того, обратите внимание, что, если Вы используете встроенные шаблоны, чтобы добавить классы к папке, она будет по умолчанию помещена в пространство имен, которое отражает иерархию папки.
Классы будет легче найти и что один должны быть достаточно хорошие причины.
Правила, за которыми мы следуем:
Нет. I' ve попробовал оба метода на маленьких и больших проектах, и с синглом (меня) и с командой разработчиков. Я нашел, что у самого простого и самого продуктивного маршрута должно было быть единственное пространство имен за проект, и все классы входят в то пространство имен. Вы тогда свободны поместить файлы класса в любые папки проекта, которые Вы хотите. Есть не бездельничание добавлению заявлений использования наверху файлов все время, поскольку есть только единственное пространство имен. Важно организовать исходные файлы в папки и по-моему that' s все папки должен использоваться для. Требование, чтобы эти папки также нанесли на карту к пространствам имен, ненужное, создает больше работы, и я нашел, было на самом деле вредно для организации, потому что добавленное бремя поощряет дезорганизацию. Возьмите этот FxCop, предупреждающий, например:
CA1020: Избегайте пространств имен с немногими типами
причина: пространство имен кроме глобального пространства имен содержит меньше чем пять типов https://msdn.microsoft.com/en-gb/library/ms182130.aspx Это предупреждение поощряет демпинг новых файлов в универсальный Проект. Общая папка, или даже корень проекта, пока у Вас нет четырех подобных классов, чтобы оправдать создание новой папки. Это будет когда-либо происходить? Нахождение Файлов В принятом ответе говорится " классы будет легче найти и что один должны быть причины, достаточно хорошие; Я подозреваю, что ответ относится к наличию нескольких пространств имен в проекте который don' t наносят на карту к структуре папок, а не что я предлагаю, который является проектом с единственным пространством имен. В любом случае, в то время как Вы can' t определяют, в какой папке файл класса находится от пространства имен, Вы можете найти, что это при помощи Движения К Определению или исследователю решения для поиска окружает Визуальную Студию. Также этот isn' t действительно большая проблема, по-моему. Я don' t расходуют даже 0,1% моего времени разработки на проблеме нахождения, что файлы оправдывают оптимизацию его. Имя сталкивается Верное создание нескольких пространств имен позволяет проекту иметь два класса с тем же именем. Но это - действительно хорошая вещь? Возможно, легче просто отвергнуть это от того, чтобы быть возможным? Разрешение двух классов с тем же именем создает более сложную ситуацию, где 90% вещей времени работают определенный путь, и затем внезапно Вы находите, что у Вас есть особый случай. Скажите, что у Вас есть два Прямоугольных класса, определенные в отдельных пространствах имен:
- класс Project1. Изображение. Прямоугольник
- класс Project1. Окно. Прямоугольник It' s возможный поразить проблему, что исходный файл должен включать оба пространства имен. Теперь Вы должны выписать полное пространство имен везде в том файле:
var rectangle = new Project1.Window.Rectangle();
Или имейте предосудительные отношения с некоторым противным заявлением использования:
using Rectangle = Project1.Window.Rectangle;
С единственным пространством имен в Вашем проекте Вы вынуждены придумать отличающийся, и I' d спорят более описательный, имена как это:
using Project1.General;
using Project1.Image;
using Project1.Window;
using Project1.Window.Controls;
using Project1.Shapes;
using Project1.Input;
using Project1.Data;
против
using Project1;
Непринужденность не необходимости добавить пространства имен все время, сочиняя кодекс. It' s не время это берет действительно, it' s перерыв в потоке необходимости сделать это и просто файлы заполнений с большим использованием заявлений - для какой? Действительно ли это стоит того?
Изменение структуры папок проекта
Если папки нанесены на карту к пространствам имен тогда, путь папки проекта эффективно трудно закодирован в каждый исходный файл. Это означает, что любой переименовывает или движение файла, или папка в проекте требует, чтобы фактическое содержание файла изменилось. И декларация пространства имен файлов в той папке и заявления использования в целой связке других файлов, что справочные классы в той папке. В то время как сами изменения тривиальны с набором инструментов, он обычно приводит к большому, берут на себя обязательство состоять из многих файлов чьи классы haven' t даже измененный.
С единственным пространством имен в проекте Вы можете изменить структуру папок проекта однако, Вы хотите без любых исходных файлов, самих изменяемых.
Визуальная Студия автоматически наносит на карту пространство имен нового файла к папке проекта it' s созданный в
Неудачный, но я нахожу, что стычка исправления пространства имен является меньше, чем стычка контакта с ними. Также I' ve выработал привычку копии, приклеивающей существующий файл вместо того, чтобы использовать Add-> Новый.
Intellisense и Object Browser
У самой большой выгоды, по-моему, использования нескольких пространств имен в крупных проектах есть дополнительная организация, рассматривая классы в любом наборе инструментов, который показывает классы в иерархии пространств имен. Даже документация. Очевидно, наличие всего одного пространства имен в проекте приводит ко всем классам, показываемым в единственном списке, а не ворванный категории. Однако лично I' ve, никогда озадаченный или отложенный из-за отсутствия этого так я don' t находят его достаточно большой выгодой, чтобы оправдать несколько пространств имен. Хотя, если я писал большую общественную библиотеку классов тогда, я был бы, вероятно, использовать несколько пространств имен в проекте так, чтобы собрание выглядело опрятным в наборе инструментов и документации.
Я думаю, что стандарт, в.NET, должен попытаться сделать это, если это возможно, но не создать излишне глубокие структуры только, чтобы придерживаться его как твердое правило. Ни один из моих проектов не следует за пространством имен == правило структуры 100% времени, иногда его просто более чистый/лучше, чтобы сломаться из таких правил.
На Яве Вы don' у t есть выбор. I' d требование, что классический случай какой работы в теории, против какой работы на практике.
@lassevk: Я соглашаюсь с этими правилами и имею еще один, чтобы добавить.
Когда я вложил классы, я все еще разделил их, один за файл. Как это:
// ----- Foo.cs
partial class Foo
{
// Foo implementation here
}
и
// ----- Foo.Bar.cs
partial class Foo
{
class Bar
{
// Foo.Bar implementation here
}
}
I' d говорят да.
Во-первых, будет легче найти фактические кодовые файлы следующим вниз пространствами имен (скажите, когда кто-то посылает Вам по электронной почте голую стопку требования исключения). Если Вы позволяете своим папкам выйти из синхронизации с пространствами имен, нахождение, что файлы в больших кодовых базах становятся получением утомительного.
Во-вторых, ПРОТИВ произведет новые классы, которые Вы создаете в папках с тем же пространством имен его родительской структуры папок. Если Вы решите плавать против этого, это будет просто еще одна работа сантехники ежедневно делать, добавляя новые файлы.
Конечно, это само собой разумеется, что нужно быть консервативным о том, как глубоко xis иерархия папки/пространства имен идет.
Да они должны, только привести к беспорядку иначе.
What' s стандарт?
Нет никакого официального стандарта, но традиционно образец отображения папки к пространству имен наиболее широко используется.
В библиотеках классов делают папки обычно соответствуют пространству имен структура или действительно ли это - ассортимент?
Да, в большинстве библиотек классов папки соответствуют пространству имен для организационной непринужденности.