В какой ситуации подход пространства имен c ++ / c # лучше, чем подход Java? - PullRequest
4 голосов
/ 17 марта 2010

Причина, по которой я спрашиваю это, состоит в том, что c # мог бы легко скопировать Java-соглашение или его вариант, но выбрал более гибкий подход для явного объявления пространств имен внутри файлов. Как программисту на Java часто бывают вещи, которые я хотел бы сделать по-другому, но пространства имен не являются одним из них.

Гибкость сопряжена с определенными затратами (дополнительные скобки, дополнительные решения для разработчиков, затрудняющие просмотр вклада проектов в пространство имен, по крайней мере, без специальной IDE). Итак, какие есть практические примеры, когда эта гибкость выгодна?

edit: Чтобы уточнить, дело в том, как классы объявляют себя в пространствах имен, а не в том, как импортировать / ссылаться на классы из других пространств имен.

Ответы [ 3 ]

1 голос
/ 17 марта 2010

Это может быть полезно в сгенерированном коде. Иногда генерация кода может захотеть создать один исходный файл для нескольких классов - и они могут находиться в разных пространствах имен.

1 голос
/ 17 марта 2010

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

com.yourcompany.blah.blah.verylong.blah.blah.FantasticClass
com.someothercompany.blah.blah.also.very.lengthy.blah.blah.FantasticClass

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

com.someothercompany.blah.blah.also.very.lengthy.blah.blah.FantasticClass = new com.someothercompany.blah.blah.also.very.lengthy.blah.blah.FantasticClass();

... или странные упражнения по рефакторингу, чтобы избежать этого.

Помимо этого икота, который можно довольно легко исправить с помощью новой языковой функции, такой как "псевдоним класса импорта class2", я предпочитаю простоту подхода Java.

0 голосов
/ 17 марта 2010

С точки зрения дизайна кода пространство имен совпадает с пакетом. Хороший стиль в Java - помещать классы в пакеты в зависимости от их роли в приложении. Это повышает удобочитаемость и удобство сопровождения кода. С этой точки зрения пространства имен одинаковы. Но пространство имен не заставляет вас помещать классы в разные папки.

...