如何将C#代码组织到文件中?

如何将C#代码组织到文件中?,c#,code-organization,C#,Code Organization,在C#中,创建什么类型、应该拥有什么成员以及应该使用什么名称空间等问题都是OO设计的问题。这不是我感兴趣的问题 相反,我想问一下如何将这些存储在磁盘工件中。以下是一些示例规则: 将程序集的所有类型放在单个源文件中。一位这样做的朋友说:“文件是一种archiac代码组织工具;今天我使用classview和折叠到定义来浏览我的代码” 将所有代码放在一个程序集中。使部署和版本控制更加简单 目录结构反映了名称空间结构 每个命名空间都有自己的程序集 每种类型都有自己的程序集。(列为一个极端的例子。) 每

在C#中,创建什么类型、应该拥有什么成员以及应该使用什么名称空间等问题都是OO设计的问题。这不是我感兴趣的问题

相反,我想问一下如何将这些存储在磁盘工件中。以下是一些示例规则:

  • 将程序集的所有类型放在单个源文件中。一位这样做的朋友说:“文件是一种archiac代码组织工具;今天我使用classview和折叠到定义来浏览我的代码”

  • 将所有代码放在一个程序集中。使部署和版本控制更加简单

  • 目录结构反映了名称空间结构

  • 每个命名空间都有自己的程序集

  • 每种类型都有自己的程序集。(列为一个极端的例子。)

  • 每种类型都有自己的源文件

  • 每个成员都有自己的文件;每种类型都有自己的目录。(列为一个极端的例子。)

目前我做:

  • 一个用于生产代码+单元测试的程序集
  • 目录结构模仿名称空间
  • 每个文件一种类型
    • 嵌套类型使用
      partial
      类型获取自己的文件。即:

无论你做什么,请始终如一地去做。我不相信有任何单一的答案(尽管有一些错误的答案)。但是,请确保你保持真实的状态,因为这将是你的继任者轻松找到工作的关键。

我也这样做。我有一点不同:

  • 每个文件一种类型

我在需要它们的地方声明委托类型,即不是在它们自己的文件中,而是在使用它们的类中。

对于不到十几个类的小型项目,每个文件只有一个类


对于企业项目,我在一个解决方案中有多个项目。它们按用途(业务类、接口、UI)分组。每个类都有自己的文件。

我更喜欢传统的每个公共类一个文件,项目中有文件夹(映射到子目录),用于根据需要对概念相关的类进行分组,以保持解决方案资源管理器视图的可管理性。如果你的类名选择得很好,那么文件夹就不是绝对必要的,但是如果项目中有很多类,文件夹是很有用的

对嵌套类型使用单独的文件似乎有些过分,至少如果嵌套类是相对简单的“helper”类,尤其是当它们是私有类时


对于您朋友的“一个大文件中的所有内容”方案,主要的实际反对意见是Visual Studio在处理很长的代码文件时往往会变得非常非常慢。

我更喜欢使用任何语言的这种组织

在他们自己的文件中的相关小类

大类在它们自己的文件中


独立子项目的目录。

我为每个架构层创建一个程序集。(WinUI.exe、BusinessWorkflow.dll、BusinessComponent.dll等

然后,每个类一个物理文件

这就是“垂直”

从概念上讲,名称空间是水平的,将域级功能分组在一起。所有客户的东西都放在“客户”名称空间中,例如,订单放在“Accounting.AccountsPayable”中

由于每个程序集在体系结构上只引用它下面的程序集,因此您的intellisense很好地受到域模型中相关引用的约束


(尽管必须同意上述观点-一致性至关重要。

无论类型有多小,都要将每个类型放入单独的文件中-例外:嵌套类和委托

顺便说一句,使用分部类进行分离的唯一目的是将嵌套类型放置在其自己的文件中,这似乎有些过分。 部分类应该明智地使用,通常用于文件生成工具——您必须考虑如何为嵌套类“命名”部分类。为物理嵌套文件生成一个直观的名称可能是繁琐的,并且它肯定不是一个简单的任务。
对于项目,为项目命名以反映名称空间-例外:当嵌套名称空间变大时,我会将嵌套文件夹迁移到另一个项目中。

你是想说我们应该保持一致吗?我不确定。咧嘴笑回答得好,顺便说一句。
// ------ C.cs

public partial class C : IFoo
{
    // ...
}

// ------ C.Nested.cs
partial class C
{
    public class Nested
    {
        // ...
    }
}