这是根据目录名称命名空间的好方法

时间:2011-02-18 07:13:11

标签: c# .net

我有一个存储源文件的目录结构。这是一个很好的做法 根据目录结构命名命名空间?

Models\model.cs
Data\data.cs

一个在名称空间模型中定义 一个在名称空间数据

中定义

6 个答案:

答案 0 :(得分:6)

是的,这是典型的方法,也是ReSharper等工具支持的方法。

这种与Java方法的区别在于,您不会从顶部向下添加目录 - 只是从项目的默认命名空间。例如,假设我们正在创建Foo.Bar.Baz.Model和Foo.Bar.Baz.Data,C#和java解决方案可能是:

<强> C#:

Foo.Bar.Baz
  Foo.Bar.Baz.csproj defining a project with default namespace of Foo.Bar.Baz
  Model\
        SomeModel.cs
  Data\
       SomeData.cs

<强>爪哇:

src\
    foo\
        bar\
            baz\
                model\
                       SomeModel.java
                data\
                     SomeData.java

答案 1 :(得分:0)

是通常的做法,但您也将项目名称放在目录名称之前,因此您将拥有:myclasslibraryname.Models.Model和myclasslibraryname.Data.Data

答案 2 :(得分:0)

是。这是Java中的常见做法(至少,我看过大型项目的源代码几乎总是以这种方式构建)。在我看到的C#中并不常见,但没有什么能阻止你这样做,它可以帮助你更快地找到代码。

你可能想要一个更深层的命名空间层次结构,而不仅仅是一个层次。通常在其前面加上您的组织或组名,项目名称,库/程序名称,然后是代码架构名称(如模型,视图,数据等)。无论你的项目的源代码在什么范围内都是最有意义的。

答案 3 :(得分:0)

一般来说,我认为这是一个很好的做法。当您以这种方式执行此操作时,在执行代码时,您通常可以关联或轻松查找并了解代码文件的来源。

这在维护代码方面也是一种很好的做法。一些新用户进来,他只能看到命名空间并识别代码文件的位置或需要搜索的位置。

答案 4 :(得分:0)

我真的不知道这是好还是不好。 但我这样命名。 我为不同的模块定义了类别。

像这样: Company.Common Company.Common.Web

Company.Windows Company.Windows.Services

Common表示目录。在里面我用VS2010创建了一个解决方案。 在解决方案中,我为每个部分创建了一个项目,因此项目的子目录也是如此,如果项目很复杂,那么dll中现有类的更多子目录。

我在所有视图中都有一个很好的概述(目录 - 视图和项目视图 - 代码视图)。

答案 5 :(得分:0)

这是许多项目的便捷惯例,也是一些工具支持或期望的项目。

但是,这不是完整的故事。虽然这是一个很好的默认,但我不认为它应该被视为不可侵犯的最佳实践,因为有些情况可能会激励以另一种方式做事。需要考虑的其他因素包括:

  • 不必要的命名空间扩散 和深度嵌套的命名空间 层次结构对用户来说可能是一种痛苦 你的类型。在一个大型图书馆你 可能想开始组织 源代码文件到一些文件夹中 结构在你觉得需要之前 在你的上面强加多个命名空间 客户端。
  • 与此相关,名称空间 .NET中的层次结构应该是 工作之间的依赖关系 类型从子命名空间转到 父母,而不是相反。 这并不总是自然的方式 将源代码组织成 文件夹/目录。例如,一个 经常看到人们创建命名空间 例如MyNamespace.Foo.Common 包含两者使用的实用程序类型 MyNamespace.Foo.Bar1和中的类型 MyNamespace.Foo.Bar2中的那些。它 他们在源头上似乎是明智的 代码组织级别,但它 打破命名空间依赖 约定。
  • 有时您可能想要提供 通过添加附加功能 某些类型到库名称空间 分发补充组件 而不是完全释放 新版本的完整库 部件。它可能会更多 方便保存源代码文件 对于各自的组件 在...中彼此分开 存储库,而不是存储它们 一起只是为了保持所有类型 对于同一文件夹中的命名空间。

简而言之,我会说按照惯例,除非你有充分的理由不这样做。但是,如果你有充分的理由利用命名空间可以提供与它们的分组完全正交的类型分组到可部署程序集以及构建它们的源代码这一事实,那么不要让它阻止你。