В чем смысл полностью определенных имен классов? - PullRequest
3 голосов
/ 29 октября 2009

У меня есть сторонний SDK в C #, который имеет такие имена классов:

com.companyname.productclass.enterprise.productname.sdkname.namespace
com.companyname.productclass.enterprise.productname.sdkname.namespace.objects
com.companyname.productclass.enterprise.productname.sdkname.namespace.objects.fields
com.companyname.productclass.enterprise.productname.sdkname.namespace.objects.fields.data
com.companyname.productclass.enterprise.productname.sdkname.namespace.security

... и т. Д.

Есть какой-то смысл в этом, что я упускаю? Или это просто вопрос стиля кодирования?


SDK более многословен, чем кажется необходимым по нескольким причинам, что приводит к многотысячным строковым файлам .cs, поэтому я готов принять людей, которые написали его, в стиле кодирования, отличном от того, что я m раньше (или им платили за байт: D)

Ответы [ 5 ]

7 голосов
/ 29 октября 2009

Смысл в том, чтобы избежать конфликтов имен. Например, если я создал библиотеку классов с пространством имен «objects», как в

com.davidstratton.productclass.enerprise.productname.sdkname.objects

он может существовать бок о бок с другими классами.

Это может показаться излишним, но имейте в виду дни «ада длл», которые мучили развитие в пред .Net дни. Чтобы компании могли (и делали) классы продуктов с одинаковыми именами, чтобы установка одного приложения могла сломать другое приложение. Одной из целей разработки .Net было избежать этого.

Соглашение об именовании, о котором вы спрашиваете, фактически указано в рекомендациях по проектированию классов, как указано здесь: http://msdn.microsoft.com/en-us/library/ms229048.aspx.

Редактировать - Добавлено

Мое утверждение выше неверно, говоря, что это в "официальных инструкциях". Я не уверен, где я увидел рекомендацию по присвоению имен com.companyname.blah.foo.bar, но я не могу найти ни текущего, ни более старого определения. Я должен был представить, что читаю это где-то.

Так что я официально согласен со всеми, кто сказал, что это излишество.

5 голосов
/ 29 октября 2009

чрезмерно многословно. Меня не удивит, если каким-то образом этот SDK будет портом кодовой базы Java или был написан в основном разработчиками Java.

Соглашение о пространстве имен определенно не соответствует общим рекомендациям и рекомендациям Microsoft.

См .: Правила именования пространств имен

1 голос
/ 29 октября 2009

Это предотвращает конфликты именования классов, которые могут часто происходить, когда вы используете несколько библиотек в своем проекте.

Хороший пример внутри самой платформы .NET: в пространстве имен System.Web.UI.WebControls есть класс Image, а в пространстве имен System.Drawing - класс Image. Без пространств имен эти классы будут конфликтовать друг с другом.

1 голос
/ 29 октября 2009

Вы должны прочитать пост (также на stackoverflow) о умном программисте, который создал глобальную переменную с именем "int." Это ответит на этот вопрос в спешке!

1 голос
/ 29 октября 2009

Это выглядит чрезмерно, но вы всегда должны включать пространство имен, чтобы не конфликтовать с другими (например, в зависимости от домена компании) - это особенно важно для SDK, так как я предполагаю, что он будет использоваться в самых разных контекстах.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...