Недавно я провел рефакторинг приложения среднего размера, и одной из задач было разделить часто используемый код на разные проекты.
Теперь предположим, что обычно используемая структура пространства имен
Core.Interfaces
- для основного приложения с интерфейсом IFoo
и для каждой специализированной/внешней/ссылочной сборки я решил сделать расширение, например
Core.Interfaces.Html
с интерфейсом IBar
сборка Core
основного приложения находится в проекте с именем Core
с пространством имен по умолчанию Core
, а для сборки Html
я создал проект с именем HtmlCore
с пространством имен по умолчанию Core
.
Эффект результата (и причина, по которой я выбрал эту конкретную методологию) заключается в том, что после того, как вы сослались на сборку Html
, операторы using
не нужно было бы обновлять, и чистый эффект
Core.Interfaces.IFoo fooIf;
Core.Interfaces.Html.IBar barIf;
или с оператором использования Core.Interfaces
приведенное выше преобразуется в
IFoo fooIf;
Html.IBar barIf;
Эта неявная структура пространства имен является прямым результатом зависимостей, и она действительно сослужила нам хорошую службу, поскольку значительно упрощает обслуживание пространства имен проекта, и единственное, что нужно кому-то, — это ссылка на сборку. Структура аналогична тому, что Microsoft уже делает в .net framework.
Дело в том, что у меня есть другие мысли, и (для будущих проектов) я рассматриваю структуру пространства имен, которая является явной для каждой сборки, например:
Core.DataInterfaces
Html.Core.DataInterfaces
Итак, кто-нибудь работал со структурой explicit, с обеими или даже с чем-то еще, чего я не пробовал? Я открыт для предложений и ищу лучшее решение, поскольку цель состоит в том, чтобы освободить время от обслуживания и путаницы в команде во время разработки.