Я согласен с отмеченным ответом.Молодец, Дэвид.На самом деле, я почувствовал облегчение, увидев ответ, подумал, что схожу с ума.
Я вижу этот интересный паттерн «ручки в горшочке» на фриланс-предприятиях на предприятии C # все время, когда люди следуют соглашениютолпа и команда должны соответствовать, а несоответствие создает проблемы.
Другое безумие - это одно пространство имен на ерунду сборки.Таким образом, вы получаете SomeBank.SomeApp.Interfaces
пространство имен и все в нем.
Для меня это означает, что типы разбросаны по пространствам имен и сборкам, содержащим целый ряд вещей, которые меня не волнуютна него нужно ссылаться повсюду.
Что касается интерфейсов, я даже не использую интерфейсы в своих частных приложениях;DI работает с типами, в частности с виртуальными, базовыми классами или интерфейсами.Я выбираю соответственно и помещаю типы в библиотеки DLL в соответствии с тем, что они делают.
У меня никогда не было проблем с DI или заменой логики позже.
• Сборки .NET - это единица безопасности, APIобласть действия и развертывание, и они не зависят от пространств имен.
• Если две сборки зависят друг от друга, их нельзя развернуть и создать версии отдельно, и их следует объединить.
• Наличие большого количества DLL часто означаетобнародование большого количества материала, такого, что трудно отличить фактический публичный API от членов типа, которые должны были быть обнародованы, потому что они были произвольно помещены в свою собственную сборку.
• Нужен ли когда-либо код вне моей DLLиспользовать мой тип?
• Начать консервативный;Обычно я легко могу выдвинуть тип из слоя, в противном случае это немного сложнее.
• Могу ли я аккуратно упаковать свою область функций или фреймворк в пакет NuGet, чтобы он был полностью необязательным и версионным, напримеркакой-нибудь другой пакет?
• Совпадают ли мои типы с доставкой функции, и могут ли они быть помещены в пространство имен функции?
• Многие реальные библиотеки и фреймворки являются фирменными, что облегчает ихобсудить, и они не сжигают имена пространств имен, которые подразумевают его использование или являются неоднозначными, могу ли я маркировать компоненты моего приложения, используя «кодовые имена», такие как Steelcore, вместо общих зашифрованных и запутанных терминов, errm «Services»?
Редактировать
Это одна из неправильно понятых вещей, которые я вижу в разработке сегодня.Это так плохо.
У вас есть API, поэтому поместите все его типы в один проект API.Удаляйте их только тогда, когда у вас есть необходимость поделиться ими или использовать их повторно.Когда вы перемещаете их, перемещайте их прямо в пакет NuGet с четким именем, которое содержит намерение и фокус пакета.Если вы боретесь за имя и рассматриваете «Общее», то, возможно, это связано с тем, что вы создаете дамп-базу.
Вы должны разделить ваш пакет NuGet на семейство связанных пакетов.Ваш «основной» пакет должен иметь минимальные зависимости от других пакетов.Типы внутри связаны с использованием и зависят друг от друга.
Затем вы создаете новый пакет для более специализированных типов и подтипов, которые требуют дополнительных наборов зависимостей;более ясно: вы разделяете библиотеку по ее внешним зависимостям, а не по типу или по типу интерфейса, или по исключению.
Таким образом, выВозможно, вы поместите все ваши типы в одну большую библиотеку, но некоторые более специализированные типы (цветные пятна) зависят от определенных внешних библиотек, поэтому теперь вашей библиотеке необходимо включить все эти зависимости.В этом нет необходимости, вместо этого вы должны разбивать эти типы на дополнительные специализированные библиотеки, которые принимают необходимые зависимости.
Типы в пакетах A и B могут принадлежать к тому же пространству имен .Ссылка A вводит один набор типов, а затем, необязательно, ссылка B дополняет пространство имен еще несколькими.
Вот и все.
Люк