Как я могу убедить скептических коллег о надлежащих пространствах имен в .NET?

Вам необходимо перейти в AppCenter.

В AppCenter всплывающее окно больше не появляется, что означает, что они всегда отправляются, а HockeyApp удаляется в ноябре 2019 года.

5
задан Robert Harvey 26 August 2014 в 15:38
поделиться

11 ответов

Хорошие ответы, уже

Я прочитал много хороших ответов (изображение папки диска является хорошим, например, как разделение/организация объекта/понятия).

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

Аргумент полномочиями

Каждый C#, VB.NET, Java, C++, безотносительно достойного разработчика на этой планете подтверждают, что пространства имен/пакеты являются хорошей вещью. Эй, они даже рассматривают это в JavaScript Mozilla.

Я предполагаю, что Ваш вопрос на Переполнении стека имеет касание "Аргумента авторизации"... ^_^

Привычка - вторая натура

Я полагаю, что Вы падаете в случае "Старых привычек".

В то время как у меня нет прямого опыта о VB.NET против старых привычек VB6, я делаю для C++ против упрощенного подобного C, C++.

Половина работы...

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

Например (это является самым верным для C++ devs сталкивающийся со "старомодным", подобным C кодом, но это жизнеспособно везде, я предполагаю), сделайте они используют префиксы для своих символов.

Сделайте они имеют:

  • AccountUser
  • AccountPrice
  • AccountId
  • LoginUser
  • LoginPassword

классы/символы, и объясняют, что "Пользователь" Учетной записи не является тем же, чем "Пользователь" входа в систему, и таким образом, префикс для дифференциации их?

"Шаблон" идет прямо через потолок, когда они снабжают префиксом свои символы модулем (который, конечно, имеет место для Вашего кода, если это является достаточно большим):

У Вас есть MyUtil DLL, а также MyKernel DLL и MyGui DLL? Таким образом сделайте Вы имеете:

  • MyUtil_Something
  • MyUtil_SomethingElse
  • MyKernel_YetAnotherObject
  • MyKernel_AnotherThing
  • MyGui_SomeGui

классы/символы?

Если да, то они должны подтвердить, что уже используют пространства имен.

В противном случае затем любая Ваша кодовая база является слишком маленькой (но Ваши "9 проектов" говорят мне, что это не), или они регулярно - проблемы коллизии имени... Который может быть разрешен или добавлением префикса, объясненным выше, или еще лучше, пространствами имен.

Другая половина...

Другая половина работы заставляет их объяснить, почему их "пространства имен" лучше, чем одно встроенное на языке (это - момент, необходимо удержаться от стука голове против стен в разочаровании из-за смертельного воздействия braindead обоснование).

Снова, можно ли использовать Аргумент вещью полномочий (Что? Вы действительно верите, знают лучше, чем инженеры Лучшего стрелка от Microsoft?), но в этом случае, необходимо дать примеры того, почему.NET (или безотносительно) пространства имен лучше, чем то, которое они используют (или не используйте).

Для VB.NET/.NET, там уже более чем достаточно хороших аргументов, и я не пойду на тех позади пространств имен C++, потому что это было бы вне темы.

Но по крайней мере, использование встроенных пространств имен делает префикс упомянутым выше дополнительный. Заключение в кавычки примера из Интернета (я не очень хорошо осведомлен относительно VB.NET):

Imports MyWholeProject

Class HelloWorld

   Public Sub Main()
      Dim o As MyModuleAAA_MyObject = New MyModuleAAA_MyObject
      Dim t As MyModuleBBB_MyThing = New MyModuleBBB_MyThing
      Dim g As MyModuleCCC_MyGizmo = New MyModuleCCC_MyGizmo
      REM etc.
   End Sub

End Class

Является вполне более подробным, чем пространство имен включило:

Imports MyWholeProject.MyModuleAAA
Imports MyWholeProject.MyModuleBBB
Imports MyWholeProject.MyModuleCCC

Class HelloWorld

   Public Sub Main()
      Dim o As MyObject = New MyObject
      Dim t As MyThing = New MyThing
      Dim g As MyGizmo = New MyGizmo
      REM etc.
   End Sub

End Class

И многословие приводит к более неясному коду и таким образом ошибкам. Конечно, Вы могли заменить MyModuleAAA чем-то менее длинным, как MMAAA... Но затем, это приводит к более неясному коду и т.д. и т.д.

Больше использования пространств имен на.NET может быть найдено путем поиска с помощью Google, как: http://www.vbdotnetheaven.com/UploadFile/ggaganesh/NamespacesInVbDotNet04202005005133AM/NamespacesInVbDotNet.aspx

Связанные с проектом/карьерой причины

Теми причинами является больше relatived для проектирования/мчаний управления...

Обслуживание не является дополнительным

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

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

Держание в курсе себя не является дополнительным

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

И это означает, что устаревший разработчик, при применении к другому заданию, проиграет, также. Поскольку, эй, кто хочет заплатить за кого-то, кто просто не получает что-то столь же простое как пространства имен?

Опыт является хорошей вещью, когда это вместе со знанием текущего современного состояния. В противном случае затем это - только старое динозавром циничное и бесполезное быстрое движение о, "как это было лучше (чтение: более простой), в мое время, когда нам не были нужны все те штуковины как объекты".

Держание в курсе себя не является дополнительным (сторона менеджера)

Отказываясь адаптироваться к новым возможностям языка (обычно, потому что "мы знаем лучше, Вы знаете?"), инженеры просто обуваются, в то время как конкуренция, вероятно, помещает кроссовки. Это означает, что приложение, произведенное устаревшей командой, в конечном счете проиграет. Период.

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

Обратите внимание, что работа над устаревшим продуктом помогает менеджерам верхнего уровня решить, что стало бы легче переписать его с нуля... И возможно где-то в другом месте, с менее заплаченными инженерами и менеджерами...

7
ответ дан 18 December 2019 в 07:57
поделиться

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

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

5
ответ дан 18 December 2019 в 07:57
поделиться

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

  1. Определенные твердые номера на стоимости не наличия пространств имен (пригодность для обслуживания, отладка, и т.д.) и получают высшее руководство на борту.

  2. Добровольно предложите создавать конвенции пространства имен и делать ВСЮ работу для преобразования проектов.

К сожалению, по моему опыту, однажды что-то столь распространяющееся, как конвенция пространства имен была установлена, она берет закон конгресса для изменения его.

2
ответ дан 18 December 2019 в 07:57
поделиться

Надо надеяться, Ваша команда понимает объектно-ориентированные принципы разработки. Вы группируете сопутствующую информацию в классы, которые начинают операции, которые работают над той информацией. Пространства имен (или должен быть), подобный. Вы используете пространства имен для связанных с группой классов вместе, и вместе они обеспечивают операции для работы над коллективной информацией пространства имен.

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

Точка: это не просто вопрос персонального предпочтения. Таким же образом то, что Вы не можете ожидать вливать все свои предложения к одиночному абзацу, а скорее иметь для организации их в несколько абзацев, в которых связаны предложения; необходимо посещать уроки и организовать их в пространства имен. Разбивание Вашей записи в абзацы связанных предложений обеспечивает ясность и значение, повреждение Ваших классов в пространства имен улучшает ясность Вашего кода. Когда количество классов растет, это только становится все более важным.

3
ответ дан 18 December 2019 в 07:57
поделиться
  1. Четкость кода и организация, как многие указали.

  2. Разделение так же названных классов в различные "пробелы", как Сеть. Сессия, Встречаясь. Сессия, WebServer. Сессия, и т.д. В реальном мире существует много объектов, которые носят те же или аналогичные имена. Вот почему именам нужны их собственные пробелы для квалификации их. Пространства имен также упрощают именование блоков при надлежащем использовании, как System.Web.DLL и System.Messaging.DLL. Это помогает кодировать повторное использование, потому что Вы разделяете код на меньшие функциональные блоки (DLLs), который может быть включен по мере необходимости без включения общей гигантской массы (или путаница).

  3. Пространства имен являются границами, которые разделяют код различных проектов, целей и категорий. В больших проектах, где много файлов DLL совместно использованы и снова использованы, программистам нужен легко незабываемый способ сослаться на правильные классы и постараться не ссылаться на неправильные классы. Можно вообразить неуправляемое безумие, если Microsoft решила поместить все классы.NET в одно единственное "Системное" пространство имен? Как какой-либо программист даже начал бы писать код для вызова этих классов? Кроме того, необходимо было бы иметь дело с классами, названными как WindowsFormsTextBox и WebUIWebControlsTextBox или что-то дольше, чем это. Наличие надлежащих пространств имен помогает программистам написать код быстро и безопасно.

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

2
ответ дан 18 December 2019 в 07:57
поделиться

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

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

Скажите им, что это - физическое представление наличия одного пространства имен - стол переговоров является пространством имен, книги являются модулями/классами/проектами.

Затем попросите, чтобы они нашли книгу по генетическим алгоритмам в груде. (удостоверьтесь, что Вы скрыли его у основания груды).

Если они все еще не получают его, сдаются и начинают искать другое задание. Вы не хотите работать с людьми, настолько толстыми!;-)

1
ответ дан 18 December 2019 в 07:57
поделиться

Если необходимо убедить их, что разделивший пространства имен и не просто "Одно Истинное Пространство имен" является хорошей, желательной вещью затем, это, кажется, указывает, что Вы, вероятно, не сможете убедить их в нем. Только быть честным.

0
ответ дан 18 December 2019 в 07:57
поделиться

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

0
ответ дан 18 December 2019 в 07:57
поделиться

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

0
ответ дан 18 December 2019 в 07:57
поделиться

Если разработчики довольны VB6 и структурой существующего проекта VB6, могло бы иметь смысл иметь портированный проект, структурированы много как оригинал, даже если это ставит под угрозу некоторые лучшие практики в .NET. (Я предполагаю, что VB6 does не поддерживает пространства имен?) Пространства имен могли быть представлены позже, когда новая кодовая база стабильна и devlopers больше comfortabe с .NET.

0
ответ дан 18 December 2019 в 07:57
поделиться

Что они думают, что пространства имен для? Почему они думают, что BCL использует их?

0
ответ дан 18 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: