C#:名称空间和类结构

C#:名称空间和类结构,c#,namespaces,C#,Namespaces,来自Java,我习惯于包结构(com.domain.appname.tier) 现在我开始从事一个C#项目,其中所有项目的深度均为1: i、 e 项目A -实用程序.cs -验证。cs -.. -萃取剂 所有的cs文件大约有2500行长 如何在C#中对类和名称空间进行排序,使其有意义,并保持源文件的逻辑大小 与我想象中的Java一样: 每个名称空间中有几个(类view@jgauffin,根据类和名称空间来构造源文件和文件夹仍然是一个很好的主意。第二个项目提出了关于C#部分类的有效性问题,这将(

来自Java,我习惯于包结构(com.domain.appname.tier) 现在我开始从事一个C#项目,其中所有项目的深度均为1:
i、 e
项目A
-实用程序.cs
-验证。cs
-..
-萃取剂

所有的cs文件大约有2500行长


如何在C#中对类和名称空间进行排序,使其有意义,并保持源文件的逻辑大小

与我想象中的Java一样:

  • 每个名称空间中有几个(<10?)类,名称空间按层次结构排列
  • 每个源文件一个类
  • 每个源文件一到两屏文本

您加入的项目听起来不是很有条理,也不是良好源代码组织的好例子。

我建议您阅读Microsoft关于此主题的指南:

您应特别注意以下部分:


即使您没有编写类库,您仍然可以从这些指导原则中受益匪浅。FxCop(或现在命名的代码分析)将标记许多不符合这些指导原则的构造。

在Java中,您只需要做一些努力:)一些C#开发人员,特别是具有VB背景的开发人员,倾向于编写冗长的类并将它们放在顶层。

与Java中的方式相同

在Java中,包在物理目录中组织类。我不确定,但编译器甚至鼓励这种约定IIRC。在C#中,您没有义务将类组织到与名称空间匹配的单独目录中,但这是一种非常常见的约定

说到C#中的名称空间,它们不遵循com.domain.appname.tier约定,而是使用Company.Product.tier格式


如何重新组织大型类取决于应用程序。这是一个应用OOP指南的练习,适用于Java和C。我首先将类分组到功能区域,例如授权区域将放在项目的文件夹下

然后更新文件夹中类的名称空间以反映更改,Resharper会为您这样做,而较新版本的VS可能也会这样做


最后(如果您能够),我将开始将类拆分为更小、更易于管理的大小。

以下是我如何组织解决方案的示例,它反映了名称空间结构

项目有一个默认名称空间,在本例中为CompanyName.ProjectName 源文件按逻辑组织为目录结构。在本例中,我的WF4活动设计器组织在名为设计器的文件夹中的活动下

VS的工作方式是,在项目中创建目录时,也在创建名称空间。因此,如果我要在显示的目录中添加一个名为“Foo”的新活动设计器,其名称空间将是

“CompanyName.ProjectName.Activities.Designers”


VisualStudio采用默认名称空间,然后使用文件夹结构确定特定文件的名称空间。当然,一旦创建了文件并移动了文件,它就不会自动重构。但是,该系统不仅在控制类的名称空间方面,而且在保持文件组织方面都非常有效。

如果您深入参与该项目,我建议您花一些时间重新设计java中使用的结构,考虑到包相当于c#中的名称空间。

切换到类视图而不是解决方案资源管理器,所有内容都按名称空间排序。查看菜单->类view@jgauffin,根据类和名称空间来构造源文件和文件夹仍然是一个很好的主意。第二个项目提出了关于C#
部分类
的有效性问题,这将(显然)导致每个类有多个文件。(或者反过来说,
partial class
的设计会对第二点的有效性提出疑问:)