Я знаю, что это несколько субъективно, но мне интересно, существует ли общепринятый стандарт для именования сборок, содержащих некоторые «основные» функции.
Допустим, у вас есть более крупные проекты с такими сборками, как
и у вас есть набор «основных» классов, таких как обработчик глобальных ошибок, функция глобального журнала и т. д.
Как вообще назвали бы такую сборку? Вот некоторые вещи, которые я имел в виду:
Теперь, хотя «просто выберите одну и продолжайте» не вызовет Армагеддон, я все же хотел бы знать, есть ли «принятый» способ назвать эти сборки.





Я всегда делаю .Core.dll.
С .Net это относительно легко изменить, поэтому я бы пошел с удобством.
Меньшее количество сборок большего размера компилируется быстрее, чем многие мелкие, поэтому я бы начал с вашего «основного» материала в виде пространства имен внутри Company.Product.dll и разделил его позже, если вам нужно.
Обычно мне нравятся имена, описывающие, что находится внутри каждой сборки.
Видите ли, если вы назовете что-то как .Core, то в большой команде он может очень быстро разрастаться, так как люди будут рассматривать возможность включения очень обычных вещей в эту сборку.
Итак, я считаю, что единой основной сборки быть не должно.
Я использовал .Core, .Framework и .Common.
Тот, который я использую наиболее часто и, кажется, люблю, потому что я не вижу, чтобы другие люди его использовали, - это Root.
Я обычно делаю
CompanyName.Root
или же
SomethingMeaningfulToMe.Root
Мы используем эту модель:
и Т. Д.
Все эти «корень», «ядро», «общие» и так далее - это вероятно, не самые лучшие соглашения об именах.
Общие вещи должны находиться в корневом пространстве имен, как в .NET, string, int, и другие вещи, которые являются «основными» или «общими», находятся в корневом пространстве имен System.
Не используйте пространства имен, чтобы упростить свертывание папок в Visual Studio, но структурируйте его после что он содержит и для чего он используется.
System.Security содержит общие элементы безопасности, о которых, например, System.Xml не нужно знать, если вам явно не нужна эта функция.
System.Security.Cryptography - это подпространство имен. Криптография - это безопасность, но безопасность - это явно не криптография.
Таким образом, System.Security.Cryptography имеет полное представление о его родительском пространстве имен и может неявно использовать все классы внутри своего родителя.
Я бы сказал, что System.Core.dll был ошибка со стороны Microsoft. У них, должно быть, закончились идеи или имена DLL.
Обновлять: MSDN имеет несколько обновленный статья, которая пытается объяснить мнение Microsoft по этому поводу..
Следует отметить, что .NET BCL делает имеет System.Core.dll сборка, но не имеет System.Core пространство имен. Так что, с вашей точки зрения, MS все сделала правильно.
@Oybek Да, это должно быть "у них, должно быть, закончились идеи или DLL-имена".
Я также использовал .Core, особенно для .dll
Это все дело вкуса, я думаю, если корневое пространство имен - это название компании, я чувствую, что .Core / framework / common более наглядно, чем просто название компании.
Однако, если вы работаете над чем-то вроде проекта с открытым исходным кодом, где имя пространства имен dll / также является именем проекта, .Core /../ может быть немного избыточным.
Есть много примеров в .NET framework и других библиотеках Microsoft, где используются оба соглашения. например, есть System.dll и System.Core.dll :)
Это один из многосторонних вопросов. Если это ваш код и вы работаете в небольшой команде, я бы использовал любое соглашение об именах, которое имеет для вас смысл. Я видел, однако, в больших базах кода пространства имен, позволяющие последующим разработчикам обнаруживать функциональные возможности без необходимости документации или обучения. мы используем модель. стандартизация пространств имен упростила для разработчиков переход от одной команды к другой.
BussinessName.Division.Layer
Ядро очень содержательное и легкое для понимания соглашение об именах, и оно не конфликтует с каким-либо пространством имен .net framework, поэтому это очень хорошая практика.
Я настоятельно рекомендую инкапсулировать в каждой сборке ту службу, которую она должна предоставлять приложению, которое ее использует, а не смешивать разные домены функций в одной сборке.
Мы используем
CSG.Core
CSG.Data
CSG.Services
...
В ядро мы включаем классы, которые, вероятно, будут использоваться во всех наших продуктах: ведение журнала, расширения коллекций, универсальные шаблоны, расширения конфигурации, безопасность, проверка и т. д.
Хотя компиляция многих сборок происходит медленнее, чем меньшее количество сборок большего размера, это оптимизирует ваше развертывание, поскольку вы развертываете только классы, которые используются вашей системой, и не содержит много классов, которые не используются только потому, что вы хотели сэкономить время компиляции.
Когда вы называете свои пространства имен, я настоятельно рекомендую избегайте повторения одного и того же слова на разных уровнях пространства имен. Например, избегайте следующего:
YourCompany.Core
YourCompany.YourProduct.Core
Либо поместите ядро в YourCompany, либо в Myproduct, но не в оба. Это может сбивать с толку, если, например, ваше использование выглядит так: используя YourCompany; используя YourCompany.YourProduct;
Когда вы наберете Core.SomeClass, будет очень непонятно, откуда взялся этот класс, а если у вас есть 2 класса с одинаковым именем, это вызовет конфликт.
У меня нет проблем с наличием «базовой» сборки как таковой, но вы правы, говоря, что она может быстро стать свалкой для всех видов кода при работе в большой команде.