【问题标题】:convention - .net namespaces in projects with physical folders约定 - 具有物理文件夹的项目中的 .net 命名空间
【发布时间】:2011-12-20 12:20:26
【问题描述】:

假设我有一个名为 GhostJago.WebScraper 的 .NET 项目

在这个项目中,我有一个包含类WebScrapeEngine 的文件。 该类包含在namespace GhostJago.WebScraper {...} 中。

现在我添加一个新文件夹并将一个类文件放入该文件夹中。 我的结构基本上是:

GhostJago.WebScraper (Project)
 |-> AddIns (folder)
    |-> WebScraperAddIn.cs (c# file)
 |-> WebScraperEngine.cs (c# file)

问题: WebScraperAddIn.cs 中的命名空间应该是namespace GhostJago.WebScraper.AddIns {...} 还是无关紧要?

【问题讨论】:

  • 绝对没关系。您不必将命名空间映射到物理文件夹。
  • 这是 ReSharper 方式(以及某种约定)。但正如 Cody 所说,选择权在你。
  • 打扫房间的方式无关紧要。直到你需要找到一些东西。

标签: c# .net coding-style


【解决方案1】:

这绝对是一件好事,让我给你一个相反的例子,说明不使用它是多么糟糕

几年前,我开发了一个系统,该系统处理各种产品。所有这些都在文件夹 Company.System.Products 中。事实上,这个文件夹中的很多类在一个cs文件中也有多个类。

到有 150 种产品时,以下是经常出现的情况:

  1. 很难找到任何东西
  2. 人们很难(就签入时合并而言)处理类似类型的产品(尽管这不是命名空间问题,而是组织问题)
  3. 人们变得困惑;在哪里添加新内容?
  4. 刚接触该项目的人不知道从哪里开始

现在,显然,从编辑器的角度来看,在一个命名空间中有很多对象是一件坏事,因为上下文菜单中充满了项目,因此很难查看您想要的项目。所以添加命名空间是一个好的开始。但是,将命名空间移动到物理文件夹后,导航命名空间变得更加容易,尤其是在 IDE 之外。将类移动到单独的文件中意味着更小的类几乎没有任何合并冲突。它还使得开始将文件夹推送到单独的程序集中变得更加容易。

因此,在您的项目中拥有一定程度的组织只会让事情变得更容易!

【讨论】:

    【解决方案2】:

    将命名空间映射到文件夹名称纯粹是约定俗成的。其目的是让在大型项目中更容易找到源代码。

    话虽如此,从技术角度来看,这样做并没有特别的好处或需要。换句话说,没关系。

    【讨论】:

      【解决方案3】:

      我同意 Jon 的观点,总体而言,最佳做法是确保您的命名空间结构与您的物理文件/文件夹结构相匹配,因为它使查找内容更容易,您知道类的命名空间,然后您就知道什么文件和它所在的文件夹。好的,您已经转到定义,但是在一系列转到定义之后很容易迷失方向。但是,如果您有充分的理由不这样做,例如您希望所有与域相关的类都在同一个文件夹中(例如,您所有的客户类、订单类等),但所有 DAL 类都在同一个命名空间中,那么就可以了。主要是这些事情,最好的规则是选择一个约定并坚持下去。

      【讨论】:

        【解决方案4】:

        这样做的唯一原因是,如果您遵守惯例,那么它很容易记住,而且新人会很快上手。 .Net 根本不在乎,但对我来说,问题是我们为什么不能保持简单。

        没有什么比遗留代码库更糟糕的了,除了没有任何其他线索之外,您甚至不确定代码在哪里......

        【讨论】:

          【解决方案5】:

          最佳做法是确保您的命名空间结构与您的物理文件/文件夹结构相匹配。

          编辑:

          Should the folders in a solution match the namespace?

          convention - .net namespaces in projects with physical folders

          【讨论】:

          • 因为...?为什么这是最佳实践?为了有用,像这样的声明需要某种理由。
          • 您的声明有链接/参考吗?我很感兴趣,因为我可以提供这个作为我想做的一些改变的理由。
          猜你喜欢
          • 1970-01-01
          • 2019-03-20
          • 2015-03-30
          • 2011-09-08
          • 2013-09-26
          • 1970-01-01
          • 2014-04-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多