Что должно входить в пространство имен верхнего уровня? - PullRequest
0 голосов
/ 07 мая 2009

Что должно входить в пространство имен верхнего уровня? Например, если у меня MyAPI.WebLogic, MyAPI.Compression и т. Д. Если я помещаю классы в пространство имен верхнего уровня, нарушаю ли я принцип инкапсуляции?

Ответы [ 5 ]

3 голосов
/ 07 мая 2009

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

2 голосов
/ 07 мая 2009

Зависит от того, что такое классы.

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

Это означает, что пространство имен MyAPI верхнего уровня должно содержать:

  • Код высокого уровня: код, который разрешен для просмотра внутри MyAPI.WebLogic и MyAPI.Compression
  • Или низкоуровневый код: код, который используется MyAPI.WebLogic и / или MyAPI.Compression

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

0 голосов
/ 07 мая 2009

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

Правило состоит в том, чтобы просто поместить тип в пространство имен верхнего уровня, если вы чувствуете, что он принадлежит ему. Очевидный пример для этой ситуации - когда (используя ваши примеры) MyAPI.WebLogic и MyAPI.Compression (возможно, также как и другие) должны использовать определенный тип - поэтому лучше всего поместить этот тип в MyAPI. Если вы все еще не совсем уверены, что принадлежит, используйте библиотеки Microsoft в качестве примеров. В пространстве имен System внутри BCL существует множество классов!

0 голосов
/ 07 мая 2009

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

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

0 голосов
/ 07 мая 2009

Зависит от того, что пространство имен на самом деле. Если это приложение, то, возможно, что-то вроде загрузочных классов, загрузчиков etx, Main и т. Д. Я бы сказал (как и все) «это зависит».

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