当我将一个类文件放在一个文件夹中时,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
以避免冲突,但我在文件名中保留了更准确的名称。但这很难看,不是吗?
答案 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
...
它还有助于处理其他人的代码。通过尝试在不熟悉的代码中找到功能,您将学到很多关于组织的知识。