我遵循这条规则,但我的一些同事不同意它,并认为如果一个类较小,它可以与其他类保留在同一个文件中.
我一直听到的另一个论点是"即使微软不这样做,我们为什么要这样做?"
对此有何普遍共识?是否有应避免的情况?
Jam*_*mes 250
当人们在绝对中思考并且说你永远不应该做这样或那样的主观和挑剔的事情时,我讨厌它,好像我们都需要遵循一些愚蠢的对与错的想法.底线:如果有意义的话,每个文件有多个类是完全没问题的.有道理我的意思是:
一个非常好的例子,说明为什么我可能需要每个文件多个类:
假设我有几十个自定义异常类,每个类都是一个4行,我可以为每个单独分配一个文件,或者我可以对异常进行分组并为每个组分配一个文件.对我来说,似乎最合理/实用的方法是对它们进行分组,并且只有几个文件,因为它更有效的时间/编码(我不必右键单击 - >添加类,重命名,50次) ,它使解决方案不那么混乱,性能更好.
Mar*_*ark 172
每个文件一个类还可以让您更好地了解每个签入的更改,而无需查看文件的差异.
Jer*_*ell 71
static bool GeneralRuleShouldBeFollowed(IGeneralRule rule, IUseCase useCase)
{
return (rule.Overhead(useCase)
< My.PersonalThresholds.ConformismVsPracticality);
}
Run Code Online (Sandbox Code Playgroud)
Phi*_*off 50
我有时会在一个文件中组合多个类,如果它们是紧密耦合的,并且其中至少有一个非常小.
一般的"最佳实践"是每个班级有一个文件.
Joh*_*n K 25
除了假设的论点,而是专注于使用Visual Studio IDE和不断增长的软件项目的Windows .NET,在这种情况下,每个文件只有一个类是有意义的.
通常,对于视觉参考,每个文件没有任何一个类.真.
我不知道微软是否做了同样的事情,但是他们确实创建了partial关键字来将一个类分割为多个文件(这甚至更严重).它通常用于将自动生成的设计器代码与同一类中的自定义代码分开(但有时用于允许不同的开发人员通过不同的文件同时处理该类).因此,Microsoft确实看到了多个文件的好处,并且每个人都有多个文件组织的想法,确保使用.NET.
对于嵌套类,您别无选择,只能使用一个文件,或者至少使用其中的类的第一部分.在这种情况下,一个文件是必要的并且很好:
class BicycleWheel {
class WheelSpoke {
}
}
Run Code Online (Sandbox Code Playgroud)
否则为什么要在一个文件中保留多个类?"因为它们很小"或相互关联 的论点没有多少水,因为最终你的课程将与其他课程相关联.最终,您无法根据其使用情况轻松推断对象的文档内组织,尤其是随着软件的不断增长.
此外,如果您使用文件夹作为名称空间,那么您将永远不会有类文件名冲突.当不在像Visual Studio这样的开发环境中时,在文件系统上按文件名定位类也很方便(例如,如果你想用记事本或快速/轻快的东西快速编辑一个类).
这么多好理由......
And*_*nea 12
我也相信单个文件中应该包含一种类型.
必须提到的规则有一个例外:有两个类只有通用参数不同,例如:
RelayCommand
Run Code Online (Sandbox Code Playgroud)
和
RelayCommand<T>
Run Code Online (Sandbox Code Playgroud)
无论内容多么轻巧,我认为每个文件的一个类/接口/等是必不可少的.
如果我正在研究Visual Studio中的一个大解决方案,我希望能够看到这些文件,而不必深入研究.即使使用像ReSharper这样的导航工具,我也需要1:1的映射.
如果您发现很多内容很少或没有内容的源文件(可能会扩展一个类但不添加任何内容),那么也许您应该重新考虑您的设计.
真的,这归结为个人偏好.每个人都会说"每个档案一个班级",但我们都有理由在某些情况下避免这种情况.我曾经有一个大型项目,有大约300个不同的枚举.当一些枚举只是三态时,我不会有300个单独的文件,每个类一个.
对于那些找不到某些类的人来说,如果他们不是全部都是以他们的名字命名的文件,那么你是否有理由不在整个解决方案中使用查找?使用Find节省了我滚动浏览Solution Explorer的宝贵时间.
在更大的解决方案中,我认为每个文件有一个类是非常有价值的,并且文件的名称与类相同.它使您可以更轻松地找到您需要使用的代码.
用于C#的StyleCop工具具有标准规则,在一个命名空间中需要不超过一个顶级类(以及该命名空间中的任意数量的接口,委托和枚举).
在两个或多个类的情况下,第二个和后续类只被第一个类使用,那些可以而且应该是内部类,只对消费类可见.
小智 5
我通常每个文件有一个类,但你通常必须自行决定是否可以包含相关的类,例如将你的异常分组,这些异常可以由你自己和其他开发人员重复使用.在这种情况下,用户只需要包含一个文件而不是多个文件.
所以关键是:应该谨慎使用!!!