Именование «ядро» сборки


20

Я знаю, что это несколько субъективно, но мне интересно, существует ли общепринятый стандарт для именования сборок, содержащих некоторые «основные» функции.

Допустим, вы получили большие проекты, со сборками, как

  • Company.Product.WebControls.dll
  • Company.Product.Net.dll
  • Company.Product.UserPages.dll

и у вас есть куча «основных» классов, таких как глобальный обработчик ошибок, глобальная функция ведения журнала и т. Д.

Как бы такое собрание вообще называлось? Вот некоторые вещи, которые я имел в виду:

  • Company.Product.dll
  • Company.Product.Core.dll
  • Company.Product.Global.dll
  • Company.Product.Administration.dll

Теперь, пока «просто выберите один и продолжайте», не вызовет Армагеддон, я все равно хотел бы знать, есть ли «принятый» способ назвать эти сборки.

15

С .Net это относительно легко изменить, поэтому я бы пошел с удобством.

Меньше, больше, сборки собираются быстрее, чем многие маленькие, поэтому я бы начал с вашего «основного» материала в качестве пространства имен внутри Company.Product.dll и разделить его позже, если вам нужно.


2

Я всегда делаю .Core.dll.


9

Мне обычно нравятся имена, которые описывают, что находится внутри каждой сборки.

Вы видите, что если вы назовете что-то как. Кора, то в большой команде он может расти очень быстро, так как люди будут рассматривать вопрос о том, что в этой сборке очень распространено.

Итак, я думаю, что на самом деле не должно быть одной основной сборки.

+4

У меня нет проблем с тем, что есть сборка «Core» как таковая, но вы правы, говоря, что она может быстро стать свалкой для всех видов кода при работе с большой командой. 28 сен. 082008-09-28 20:25:27


4

Я использовал .Core, .Framework и .Common.


2

Один я использую наиболее распространенным и, кажется, любят, потому что я не вижу других людей используют это Root

Я вообще делать

CompanyName.Root 

или

SomethingMeaningfulToMe.Root 

4

Мы используем эту модель:

  • Company.Core.dll
  • Компания.WinControls.dll
  • Компания.WebControls.длл
  • Company.Product.Core.dll
  • Company.Product.WinControls.dll
  • Company.Product.WebControls.dll

т.д.


33

Все эти "корень", " core "," common "и т. д. действительно являются плохими соглашениями об именах.

Общие вещи должны находиться в корневом пространстве имен, как в .NET, string, int и другие вещи, которые являются «ядром» или «общий» лежит в корневой System -namespace.

Не используйте пространство имен более легко свернуть папки в Visual Studio, но структура его после , что она содержит в себе и то, что он используется для.

System.Security содержит общие вещи безопасности, о которых, например, System.Xml не нужно знать, если вы не хотите, чтобы эти функции были явно указаны.

System.Security.Cryptography является под-пространством имен. Криптография - это безопасность, но Безопасность не является явно криптографией.

Таким образом System.Security.Cryptography имеет полное представление о его родителях имена и может использовать все неявно классы внутри своего родителя.

Я бы сказал, System.Core.dll был slip-up на стороне Microsoft. У них, должно быть, закончились идеи или имена DLL.

Обновление: MSDN имеет несколько обновленный article that tries to explain Microsoft's thinking on the subject.

  0

Просто обратите внимание, что .NET BCL ** делает ** имеет System.Core.dll ** сборку **, но он ** не имеет ** пространство имен System.Core ** **. Итак, с вашей точки зрения, MS сделала все правильно. 14 июн. 132013-06-14 21:07:03

  0

@ Oybek Да, это должно быть «у них, должно быть, закончились идеи или имена DLL». 14 июн. 132013-06-14 21:10:58


0

я также использовал .Core, особенно для .dll

Это все дело вкуса им, если корневое пространство имен является именем компании, я чувствую .Core/рамки/общие более описательный, чем просто название компании.

Однако, если вы работаете над чем-то вроде проекта с открытым исходным кодом, где имя пространства dll/namespace также является именем проекта, .Core /../ может быть немного избыточным.

Существует много примеров в .NET Framework и других библиотеках Microsoft, в которых используются оба соглашения. например, System.dll и System.Core.dll :)


1

Это один из вопросов, на которые это зависит. Если ваш код и вы работаете в небольшой команде, я бы использовал любое соглашение об именах, которое имеет смысл для вас. Тем не менее, я видел, что в больших пространствах имен кодов базы данных позволяют разработчикам нисходящего потока открывать функциональные возможности без необходимости документирования или обучения. мы используем модель. стандартизация пространств имен упрощала разработчикам переводить команду в команду.

BussinessName.Division.Layer


0

Ядро имеет очень большое значение, и легко понять, именование и не конфликтует с любым.net framework, поэтому это очень хорошая практика.

Я настоятельно рекомендую инкапсулировать в каждой сборке сервис, который он предположил предоставить прикладной программе, которая использует его, а не смешивать разные функциональные домены в одной сборке.

Мы используем

CSG.Core 
CSG.Data 
CSG.Services 
... 

В Ядра мы включаем классы, которые могут быть использованы во всех наших продуктах: Logging, Коллекция Extensions, дженериков, расширений конфигурации, безопасности, санкционирования и т.д.

Несмотря на то, что множество сборок медленнее, чем меньше и больше, оно оптимизирует развертывание, поскольку вы развертываете только те классы, которые используются вашей системой, и не содержат много классов, которые не используются только потому, что вы хотели сохранить время компиляции.

Когда вы называете свои пространства имен, я настоятельно рекомендую избежать повторения одного и того же слова на другом уровне пространства имен. Например, следует избегать следующих действий:

YourCompany.Core 
YourCompany.YourProduct.Core 

Либо поставить ядро ​​в YourCompany или в MyProduct, но не в обоих. Это может быть очень запутанным, если, например, ваше использование выглядит так: с помощью YourCompany; с использованием YourCompany.YourProduct;

Когда вы наберете Core.SomeClass, это будет очень запутанно, откуда пришел этот класс, и если у вас есть 2 класса с одинаковым именем, это вызовет конфликт.