来自Java,我习惯了包结构(com.domain.appname.tier)
现在我开始研究一个C#项目,其中所有项目的深度为1:
即
项目A
- Utilities.cs
- Validation.cs
- ....
- Extraction.cs
并且所有cs文件大约有2,500行......
如何在C#中编写类和命名空间,这样才有意义,并保持源文件的逻辑大小?
答案 0 :(得分:9)
就像我想象你用Java做的那样:
您加入的项目听起来并不是很有条理,也不是良好的源代码组织的好例子。
答案 1 :(得分:3)
在Java中用类似的方式,你只需要付出一些努力:)一些C#开发人员,尤其是VB背景,倾向于编写looooong类并将它们放在顶层。
答案 2 :(得分:2)
我建议阅读有关该主题的Microsoft指南:
Design Guidelines for Developing Class Libraries
特别要看下面的部分:
即使您没有编写类库,您仍可以从这些指南中获益良多。 FxCop(或现在命名的代码分析)将标记许多不符合这些准则的结构。
答案 3 :(得分:1)
我首先开始将这些类组合成功能区域,例如授权区域将位于项目中的文件夹下。
然后更新文件夹中类的名称空间以反映更改,Resharper为您执行此操作,VS的较新版本也可能会这样做。
最后(如果你能够的话)我会开始将类分解为更小的更易管理的大小。
答案 4 :(得分:1)
以下是我如何组织我的解决方案的示例,它反映了命名空间结构。
项目有一个默认命名空间,在本例中是一个CompanyName.ProjectName 源文件按逻辑组织到目录结构中。在该示例中,我的WF4活动设计者在活动下组织在名为设计师的文件夹中。
VS的工作方式是,在项目中创建目录时,您还要创建名称空间。因此,如果我要在显示的目录中添加一个名为“Foo”的新活动设计器,其名称空间将为
“CompanyName.ProjectName.Activities.Designers”
Visual Studio采用默认命名空间,然后使用文件夹结构确定特定文件的命名空间。当然,一旦创建了文件,并且您移动了一个文件,它就不会自动重构。但是该系统不仅可以很好地控制类的名称空间,还可以保持文件的有序性。
答案 5 :(得分:0)
与在Java中一样。
在Java中,包组织物理目录中的类。我不确定这一点,但编译器甚至鼓励这个会议IIRC。在C#中,您没有义务将类组织到与命名空间匹配的单独目录中,但这是一个非常常见的约定。
说到C#中的命名空间,它们不遵循 com.domain.appname.tier 约定,而是使用 Company.Product.Tier 格式。
如何重新组织大类取决于应用程序。这是一个应用OOP指南的练习,适用于Java和C#。
答案 6 :(得分:0)
如果您深入参与该项目,我建议花一些时间来重新设置您在java中的方式,考虑到包等同于名称空间在c#。