我可以理解一级命名空间的用法。但是3级命名空间。看起来很疯狂。有什么实际用途吗?或者这只是一种误解?
答案 0 :(得分:9)
分层命名空间确实有用,因为它们允许逐步更精细的定义。当然,单个提供者可以生成两个具有相同名称的类。第一级通常由公司名称占用,第二级指定产品,第三级(可能更多)我提供域名。
命名空间隔离还有其他用途。一种流行的情况是将工厂模式的基类放在其自己的命名空间中,然后由提供者在自己的命名空间中派生工厂。例如。 System.Data
,System.Data.SqlClient
和System.Data.OleDbClient
。
答案 1 :(得分:2)
显然这是一个意见问题。但它真的归结为组织。例如,我有一个项目,它有一个插件api,其函数/对象看起来像这样:
plugins::v1::function
当推出2.0时,它们将被放入v2子命名空间。我打算只弃用但永远不会删除v1成员,这些成员将来很好地支持向后兼容性。这只是“理智”用法的一个例子。我想有些人会有所不同,但就像我说的那样,这是一个意见问题。
答案 2 :(得分:1)
大代码库需要它。看看boost的例子。我认为没有人会把升级代码称为“疯狂”。
如果你考虑到这样一个事实:在一个层次结构的任何一个层次上,人们只能理解大约10个项目的某个地方,那么两个层次只能给你100个最大值。一个足够大的项目需要更多,所以很容易最终达到3个级别。
答案 3 :(得分:1)
我在我的公司yyy工作XXX应用程序,我正在编写一个GUI子系统。所以我使用yyy :: xxx :: gui作为我的命名空间。
答案 4 :(得分:1)
当您需要多个级别时,您可以轻松找到自己的情况。例如,您的公司有一个巨大的命名空间,用于将其与第三方代码分开的所有代码,并且您正在编写一个要放在其自己的命名空间中的库。通常,只要您有一个非常大且复杂的系统(按层次结构分解),使用多个命名空间级别是合理的。
答案 5 :(得分:0)
这取决于您的需求和编程风格。但namespace
的一个好处是帮助分区名称空间(因此名称)。使用单个命名空间,随着项目规模和复杂性的增加,名称冲突的可能性也会增加。
如果您正在编写要共享或重用的代码,这就变得更加重要。
答案 6 :(得分:0)
我同意申请。大多数使用多级命名空间的人(根据我的经验)来自Java或.NET背景,其中噪声明显较少。我发现好的类前缀可以代替多级命名空间。
但是我已经看到在boost(和其他库)中使用多个命名空间级别。一切都在boost命名空间中,但允许(鼓励?)库在自己的命名空间中。例如 - boost :: this_thread命名空间。它允许像...这样的东西。
boost::this_thread::get_id()
boost::this_thread::interruption_requested()
“this_thread”只是一个免费函数集合的命名空间。你可以用类和静态函数(即定义自由函数的Java方法)做同样的事情,但是当语言有一种自然的方式时,为什么会做一些不自然的事情呢?
答案 7 :(得分:0)
只需查看.Net基类库即可查看充分利用的命名空间层次结构。它在一些地方有四到五个层次,但大多只有两三个,组织非常适合寻找东西。
答案 8 :(得分:0)
代码库越大,对分层命名空间的需求就越大。随着您的项目变得越来越大,您发现需要通过各种方式将其分解,以便更容易找到内容。
例如,我们目前使用2级层次结构。然而,我们现在谈论的一些较大部分将它们分解为3个级别。