Я пытаюсь выровнять свои имена сборки с их пространствами имен и использовать основную платформу .NET Framework в качестве ориентира. Я твердо убежден, что работа с структурой пространства имен, которая управляет структурой папок, делает гораздо более удобную базу кода.
Например, у меня есть поставщик кеширования, который является частью глобальной платформы разработчиков, которую мы используем. Она живет в пространстве имен нечто похожее на:
[Компания] .Core.Data.Caching
Я и другие данные, относящиеся к функции, которые также логически подпадает под функцию данных, поэтому кэширование имеет братьев и сестер, как адаптеры, Преобразователи и генераторы. Итак, давайте предположим, что мы имеем следующие пространства имен:
[Компания] .Core.Data.Adapters
[Компания] .Core.Data.Converters
[Компания] .Core.Data.Caching
[Компания] .Core.Data.Generators
Эти связанные пространства имен находятся в сборке под названием [Company] .Core.Data, которая также является названием проекта. Поиск вещей в решении становится очень простым после этой структуры. Говоря о структуре, мы возвращаемся к тому, как они хранятся на диске.
Имя проекта - это имя корневой папки. Это предполагает мою папку управления источником, который является "C: \ Source Control" на моей локальной машине:
C: \ Source Control \ Ядро [Компания] .Core.Data \
C: \ Source Control \ Ядро [ Компания] .Core.Data \ Адаптеры
C: \ Source Control \ Ядро [Компания] .Core.Data \ Кэширование
C: \ Source Control \ Ядро [Компания] .Core.Data \ Преобразователи
C: \ Source Control \ Ядро [Компания ] .Core.Data \ Генераторы
Итак, как иерархия, это выглядит как-то:
[Решение]
- [Компания] .Core.Data
---- [адаптеры]
------ (Файлы адаптеров)
---- [Кэширование]
------ (Кэширование файлов)
---- [Преобразователи]
------ (файлы конвертеры)
Я положил все проекты на том же уровне, и изменять подменю с папками. Таким образом, пространства имен и физические структуры легко согласовать. Трудная часть - найти баланс. Вы не хотите иметь большое количество небольших сборок, поэтому я обычно группирую их на более высоком уровне и, в конечном счете, реорганизую его, когда либо он становится слишком большим, либо если пространства под-имен меняются чаще, чем другие части ,
Я делаю это уже много лет, и это очень удобно не только для меня, но и для моих разработчиков.
Что касается вашего вопроса EventArgs, я согласен с консенсусом в том, что я обычно делаю один класс для каждого файла, но сделаю исключение, чтобы разместить класс EventArgs с другим классом, если он является исключительным использованием. Для multiuse я помещаю их в наивысшую логическую точку сборки, позволяя структуре пространства имен связывать мою область видимости.
У вас есть примеры, которые, по вашему мнению, являются идеальной организацией. , – leora 2008-11-23 17:46:41
см. Отредактированный комментарий, привет – Ben 2008-11-23 18:36:09