如何正确命名域命名空间内的类?

时间:2010-05-02 07:04:30

标签: c# java oop class class-design

假设我正在尝试实施国际象棋游戏。

我在Chess命名空间中创建我的Chess类。现在,我应该使用国际象棋单词为我所有的国际象棋相关类添加前缀,还是因为它们已经位于该名称空间内,我应该按照它们的名称来调用它们吗?

示例:

ChessGame vs Game
ChessPiece vs Piece

3 个答案:

答案 0 :(得分:4)

添加与包含命名空间匹配的前缀是浪费时间并且没有任何实际好处。只需使用GamePiece

答案 1 :(得分:1)

在java中,域命名空间是一个小问题。

“类的名称”是:paquage的名称+标识符。

简而言之,类的标识符是类的名称,但它是一种人类约定。该类的名称始终是paquage + identifier。

对于anonyme类,java提供标识符。

做:

a.b.c.Foo foo = new a.b.c.Foo();

相当于

import a.b.c.Foo;

...

Foo foo = new Foo();

如何命名paquage /域名空间?使用您的域名:-),使用“ing”作为后缀(java.util.logging)。

您还可以使用嵌套类(内部静态类)模拟某些域名称空间。

答案 2 :(得分:1)

假设您有一种没有任何名称空间或包的语言(在某些语言中,如Java,程序包模块和命名空间同时...)。为避免名称冲突,您可以使用前缀。但是你必须注意正确地命名所有程序元素,并在每次引入新内容时写出一些字符。因此解决方案是将命名空间引入语言,构造将自动为每个元素添加一些名称,您可以在一个地方指定(避免拼写错误)。现在,只要命名空间名称不是类,就是安全的。命名空间允许在一个地方指定前缀,因此您可以轻松使用更长的名称,从而避免冲突,而无需每次都输入更多。查看示例如何命名某些库的包 - 它们使用命名空间uri(例如country_abbreviation.compay_name.product_name.program_module)。但是,使用包名称编写整个标识符名称往往是单调乏味的,因此许多语言发明了允许使用命名空间名称的结构,就好像您在theri命名空间中使用它们一样(例如,使用,导入等)。但这让我们回到原来的状态。解决方案是避免对程序元素使用隐式名称空间,这可能会在您的情况下发生变化。因此,您想要的解决方案是为不同的游戏使用命名空间,因此您可以通过提供包名称的全名来在GUI组件中指定您所指的游戏元素。