在同一个文件中有多个类是不好的做法?

我曾经有一个类的一个文件。 比如car.csclass车 。 但是,当我编程更多的类,我想将它们添加到相同的文件。 比如car.csclass车和门类等

我的问题适用于Java,C#,PHP或任何其他语言。 我应该尝试在同一个文件中没有多个类,还是没问题?

我认为你应该尽量保持你的代码每个文件1个类。

我build议这样做,因为稍后会更容易find你的class级。 此外,它将更好地与您的源代码pipe理系统(如果文件更改,然后你知道一个特定的类已经改变)。

唯一的一次,我认为每个文件使用多个类是正确的,当你使用内部类…但内部类在另一个类内,因此可以留在同一个文件。 内部类的angular色与外部类强相关,所以把它们放在同一个文件中是没有问题的。

在Java中,每个文件都有一个公共类是语言的工作方式。 一组Java文件可以被收集到一个包中。

然而,在Python中,文件是“模块”,通常有许多紧密相关的类。 Python包就像Java包一样是一个目录。

这给了Python在类和包之间的额外级别的分组。

没有一个正确的答案是语言不可知的。 它随语言而变化。

每个文件一个类是一个很好的规则,但是适当的做一些例外。 例如,如果我在大多数类都有关联集合types的项目中工作,通常我会将类和集合保存在同一个文件中,例如:

public class Customer { /* whatever */ } public class CustomerCollection : List<Customer> { /* whatever */ } 

最好的经验法则是每个文件保留一个类,除非开始让事情变得更难而不是更容易。 由于Visual Studio的“在文件中查找”function非常有效,因此您可能无需花费太多时间查看文件结构。

不,我不认为这是一个完全不好的做法。 我的意思是通常最好每个类都有一个单独的文件,但是肯定有很好的exception情况,最好在一个文件中有一堆类。 一个很好的例子就是一组Exception类,如果对于一个给定的组有一个这样的几个这样的类,那么对于每个两个class轮类有单独的文件是否真的有意义? 我不会争辩。 在这种情况下,在一个类中有一组例外是非常麻烦和简单的恕我直言。

我发现每当我尝试将多个types合并为一个文件时,我总是会回头把它们分开,因为它使得它们更容易find。 每当我结合起来,总会有一个时刻,我试图找出wtf我定义typesx。

所以现在,我的个人规则是,每个单独的types(除了子类,也就是一个类中的一个类,而不是一个inheritance类)可以获得自己的文件。

如果您在一个团队中工作,将课程保存在单独的文件中可以更容易地控制源代码并减less冲突的可能性(多个开发人员同时更改同一个文件)。 我认为这样可以更容易地find你正在寻找的代码。

我总是遵循的规则是在一个具有相同名称的文件中有一个类。 我可能会或可能不会在该文件中包含帮助程序类,具体取决于它们与文件主类的耦合程度。 支持类是独立的,还是它们自己有用? 例如,如果一个类中的某个方法需要对某些对象进行特殊的比较,那么就不会将比较函子类与使用它的方法捆绑到同一个文件中。 我不希望在其他地方使用它,它是独立的是没有意义的。

唯一考虑文件位置的时候是我必须创build新的类。 否则我从来没有通过文件结构导航。 我使用“上课”或“去定义”。

我知道这是一个培训问题, 摆脱项目的物理文件结构需要练习。 虽然这是非常有收获的;)

如果把它们放在同一个文件里感觉很好,那就成为我的客人吧。 不能用java中的公共类来做到这一点;)

从未来的发展和可维护性来看,这可能是不好的。 如果你有一个Car.cs类,记住Car类的位置要容易得多。 如果Widget.cs不存在,你会在哪里寻找Widget类? 这是一个汽车小部件吗? 它是一个引擎部件? 哦,也许这是一个百吉饼小部件。

作为一个经验法则,一个类/一个文件是要走的路。 不过,我经常在一个文件中保留几个接口定义。 一个文件中有几个类? 只有他们在某种程度上非常密切相关,而且非常小(<5个方法和成员)

编程中的这么多时候都是如此,这很大程度上取决于情况。

例如,有关class级的凝聚力是什么? 他们是紧密结合的吗? 它们是完全正交的吗? 他们在function上有关系吗?

Web框架提供一个通用的widgets.whatever包含BaseWidget,TextWidget,CharWidget等文件

框架的用户在定义more_widgets文件时不会脱节,以包含从框架小部件中为其特定域空间派生的其他小部件。

当这些类是正交的,并且与彼此无关的时候,把这个分组合成一个单一的文件确实是人为的。 假设一个应用程序来pipe理一个build造汽车的机器人工厂。 一个名为包含CarParts和RobotParts的零件的文件是没有意义的……维修备件的订购和工厂生产的零件之间不太可能存在很大关系。 这样的join不会增加关于您正在devise的系统的信息或知识。

也许最好的经验法则是不要以经验法则来约束你的select。 经验法则是为了第一次分析而制定的,或者是限制那些不能做出正确select的人的select。 我想大多数程序员都希望相信他们有能力做出正确的决定。

除非你有充分的理由,否则你应该避免这样做。

一个有几个小相关类的文件可以比几个文件更具可读性。 例如,在使用“案例类”时,为了模拟联合types,每个类之间都有很强的关系。 对于多个类使用相同的文件具有将它们可视化地组合在一起的优点。

在你的情况下,一辆车和一扇门似乎没有任何关系,而在car.cs文件中find门类将是意想不到的,所以不要。

由于你的IDE为你提供了一个“ 导航到 ”的function,并且你可以在你的类中对命名空间有一些控制,那么在同一个文件中拥有多个类的好处对我来说是相当值得的。

父 – 子类

在很多情况下,我发现在类文件中有inheritance类是很有帮助的。

这很容易看到你的子类inheritance哪些属性和方法,这个文件提供了一个更快的总体function概述。

公共:小帮手 – DTO课程

当你需要几个普通的小的类的特定function,我觉得它是相当多余的,有一个文件的所有参考,并包括只是一个4-8class轮class…..

代码导航也更容易滚动一个文件,而不是在10个文件之间切换…它也更容易重构,当你只需要编辑一个引用而不是10 …

整体打破每个文件1个类Iron规则为组织代码提供了一些额外的自由

那么接下来会发生什么,这取决于你的IDE,语言,团队沟通和组织技巧。

但是,如果你想要这种自由,为什么要牺牲它的铁规则呢?

每个文件一个类更容易维护,对于查看您的代码的其他人更加清晰。 这也是强制性的,或者在一些语言中是非常有限的。

例如在Java中,不能为每个文件创build多个顶级类,它们必须位于类名和文件名相同的单独文件中。

Smalltalk的答案是:你不应该有文件(编程)。 他们使版本化和导航痛苦。