组织目录中的命名空间和类

时间:2015-02-22 03:19:24

标签: c# code-organization namespaces

当我将一个类文件放在一个文件夹中时,Resharper建议我更新命名空间。因此,如果我有文件Classes/Game.cs(Class),则会建议命名空间MyApplication.Classes

问题是我有一个名为Game的子文件夹,它包含Game类的组件。它与命名空间相混淆。例如:

/Classes/Game.cs                   MyApplication.Classes.{Game}
/Classes/Game/Version.cs           MyApplication.Classes.Game.{Version}

扭转这种情况的最佳方法是什么?

目前我这样组织:

/Classes/Game/Game.cs              MyApplication.Classes.Game.{Class}
/Classes/Game/Player.cs            MyApplication.Classes.Game.{Player}
/Classes/Game/Version/Version.cs   MyApplication.Classes.Game.Version.{Class}
/Classes/Game/Version/History.cs   MyApplication.Classes.Game.Version.{History}

请注意,我重命名了" main" class Class以避免冲突,但我在文件名中保留了更准确的名称。但这很难看,不是吗?

2 个答案:

答案 0 :(得分:5)

首先,一个名为“Classes”的文件夹似乎没有特别的帮助 - 一切都是一个类,在al之后,这似乎没有给你任何有用的信息。

但是,如果您希望保留此命名方案,则有两种选择。第一个是禁用Resharper的建议 - 或者至少告诉R#将它们视为提示,而不是警告。

第二种方法是为文件夹指定一个不是有效命名空间声明的名称。这将使R#停止建议它作为有效的命名空间。我经常看到和使用的格式是在名称周围使用方括号。所以你有一个像这样的文件夹层次结构:

/Classes/Game.cs
/Classes/[Game]/Version.cs

等。在这种情况下,R#将建议“MyApplication.Classes”作为Game和Version类的命名空间。

答案 1 :(得分:2)

NET: Best Practices/guidelines for dividing namespaces between files?

的答案开始

虽然每个项目,甚至每个游戏,就结构而言都会有所不同,但有一些事情会有所帮助。

首先要问的是这将是一个多大的项目。如果您不知道,请从项目的根命名空间中的所有内容开始,直到您弄明白为止,然后才重构。在你学习的时候不要浪费时间组织,因为你可能不需要它,或者一旦你想出来就需要从根本上改变它。

一旦你知道你的项目足够大,需要大量的命名空间,你也应该知道它需要什么样的结构。如果它是entity-component oriented,就像现在的大多数大型游戏一样,你可能想要使用文件夹/名称空间结构,如

MyProjectName                          # System classes, like Game1
             .Components               # Base component definitions
                        .Controllers
                        .Physics
                        .Renderers
             .Entities                 # Base entity definition and player entity
                      .Enemies
                      .Powerups
    ...

它还有助于处理其他人的代码。通过尝试在不熟悉的代码中找到功能,您将学到很多关于组织的知识。