代码之家  ›  专栏  ›  技术社区  ›  David Rodrigues

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

  •  3
  • David Rodrigues  · 技术社区  · 9 年前

    当我将类文件放在文件夹中时,Resharper建议我更新名称空间。如果我有文件 Classes/Game.cs (类),它将建议命名空间 MyApplication.Classes .

    问题是我有一个名为 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 为了避免冲突,我在文件名中保留了一个更准确的名称。但它很难看,不是吗?

    3 回复  |  直到 9 年前
        1
  •  5
  •   Justin Loveless    5 年前

    首先,一个名为“Classes”的文件夹似乎并没有特别有用——毕竟所有的东西都是一个类,这似乎并没有给你任何有用的信息。

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

    第二种方法是为文件夹指定一个不是有效名称空间声明的名称。这将使R#停止将其建议为有效的命名空间。我最常看到和使用的格式是在名称周围使用方括号。因此,您的文件夹层次结构如下:

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

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

        2
  •  3
  •   Community    7 年前

    从以下答案开始 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
        ...
    

    这也有助于 其他人的代码 。通过尝试在不熟悉的代码中查找功能,您将了解到许多关于组织的信息。

        3
  •  1
  •   t3chb0t    9 年前

    我组织文件的策略是不仅将它们放在名称空间中,而且通常放在不充当名称空间但有助于组织文件的子文件夹中。我在这些文件夹前面加下划线 _ 。如果您正在使用 R# 您应该设置文件夹属性 Namespace Provider false 。还记得删除 _Folder 如果您添加新文件,因为Visual Studio会自动添加它。

    下面是一个示例:

    MyProject
        Properties
        References
        _Impl
        App.config
        package.config
    

    首先,我将整个实现放在 _Impl 因为我不喜欢分散在项目周围的文件。

    中的下一个 _Impl公司 文件夹我可以使用更多下划线 _ 如果我认为没有理由创建一个新的名称空间,但将这些文件放在一起是有意义的 _Exceptions _Enums _Attributes :

    MyProject
        Properties
        References
        _Impl
            _Attributes
               MyAttribute.cs
            _Exceptions
                MyExtpion.cs
                MyAnotherException.cs
            _Extensions
                MyExtensions1.cs
                MyExtensions2.cs
            SomeClass.cs
            SomeOtherClass.cs
        App.config
        package.config
    

    作为命名空间,下划线 _ 文件夹没有多大意义,但它们允许出于组织目的将文件保存在一起。

    否则我会看起来像这样:

    MyProject
        Properties
        References
        MyAttribute.cs
        MyExtpion.cs
        MyAnotherException.cs
        App.config
        package.config
        SomeClass.cs
        SomeOtherClass.cs
    

    在里面 MyProject.Test 对于单元测试,我也使用此系统:

    MyProject.Tests
        Properties
        References
        _Impl // only tests
            _Attributes
               MyAttributeTests.cs
            _Exceptions
                MyExtpionTests.cs
                MyAnotherExceptionTests.cs
            SomeClassTests.cs
            SomeOtherClassTests.cs
        _TestHelpers // here I'll put any supporting classes
            SomeTestHelper.        
        App.config
        package.config