2009-01-13 53 views
1

命名空间非常酷:使用它们,您可以组织您的库,并且可以避免名称冲突。你如何使用命名空间?

嗯,这是我的意图。我认为很多人不会像使用它一样使用它......每天,我会看到95个字符长的命名空间分散代码并隐藏真正重要的信息。

下面是一个例子:

BigCorp.FrontOffice.MyApp.MySubDomain.Controllers.MyControllerXYZ xyzController = new 
    BigCorp.FrontOffice.MyApp.MySubDomain.Controllers.MyControllerXYZ( 
     BigCorp.FrontOffice.MyApp.MySubDomain.Const.MyValue1, 
     BigCorp.FrontOffice.MyApp.MySubDomain.Const.MyValue2); 

难道你有打算吗?不,当然。它是:

MyControllerXYZ xyzController = new MyControllerXYZ(MyValue1,MyValue2);

没有命名空间很简单,但难以理解与...

好了,你怎么使用命名空间?关于他们的最佳做法是什么?我们应该使用名称空间还是内部类?你的主项目有多少名字空间? (目前,我正在使用210个接口(!)和更多的命名空间 - 不可维护!)

在此之前,感谢您的回答,
Sylvain。

+0

请添加更多标签并为您的问题使用更好的标题。 – 2009-01-13 23:24:26

+0

您错误输入了长版本。在第二行末尾有一个额外的xyzController(我相信) – 2009-01-13 23:45:26

回答

2

那是一个很大的一个问题后的问题!

1)为什么使用命名空间?如您在问题中所述,它们是代码的组织化方法。实际上没有“单一”的方式来编写代码,所以通常命名的对象不会导致你的问题。创建一个类库可能会使用与另一个类库完全不同的mechinism。

2)我应该如何使用命名空间? 我更喜欢Microsoft如何分组其名称空间(see 3.5 name space map!)。按功能分组,继承,不管!命名空间只是另一个可以使用的orginizational工具。这就是说,我在少一方的错误更多。正如你所说,命名空间可以隐藏代码,并隐藏其他开发者的函数代码(哪个命名空间有我需要的gridrow类?Grid或Row?)。我试图只在需要时才使用命名空间。叫我马虎,但它迄今为止一直工作!

总结:避免复杂性。不要过分分类你的代码。

1

这取决于组织和代码的语言和广度。你说得对,在整个代码中散布很长的命名空间列表使得它更难阅读。但他们确实有一个很好的目的:代码组织。您的语言是否允许您通过“使用”或“导入”语句对别名进行别名,或者仅仅在文件的开头添加名称?如果是这种情况,那么在代码体中,只需要它们发生冲突的名称空间。

2

假设你在C#中谈到的命名空间,除了的

using Namespace; 

明显的使用情况,您也可以有别名:

using ShortCut = Really.Complicated.Namespace.Its.Just.Terrible; 
2

从理论上思考这个问题(我自己很少使用名称空间),我不确定有多少名称空间有帮助。为了保持代码的可读性,你将尝试为你的函数和变量选择清晰的名字。此外,大多数语言都支持范围设置,以某种方式限制函数或变量的可见性。而且函数本身在大多数语言中为变量内部的变量提供了一个自然名称空间

这是关于如何命名变量的一般问题。是一个声明

int x;

最好被视为一个容易验证的

intx;形式?

当程序员已经知道它是一个int,写东西像

int myint;

是同义反复。比这更糟糕,变量声明为

int x;

停止你写

double x;

下一行

,同时保持它们作为一个字没有。以及这一点,你必须记住,当你编码x是一个int或y是一个双。这就是为什么人写

ByteArrayOutputStream myByteArrayOutputStream = new ByteArrayOutputStream(size);

,让他们知道该变量到底是什么。这最终是非常重复的。如果你打算把它称为myByteArrayOutputStream,为什么语言的语法强制你明确地进入这个类?

1

我们有这样的人倾向于这样做。他们也倾向于继续使用“使用”从句来摆脱罪行。这个愚蠢的部分是让他们马上回到他们开始的地方。

通常我喜欢看到的是一种,在极少情况下是两种级别的命名空间。你应该做的是:每次你被诱惑时坚持

foo_

的前(或后)一串标识符,而不是把他们都变成命名为“foo “,并呼吁他们与

富::

这样,你现在打算反正穿上有疣有一些信达ctic signifigance。更好的是,在“foo_”内部代码中,不再需要使用前导“foo”。据了解,由于您已经在“foo”命名空间中处理一个项目。这使得内部代码更容易阅读,客户端代码也更容易理解。