我以前只为一个文件上一堂课。例如car.cs具有car类。但是,当我编写更多类时,我想将它们添加到同一文件中。例如car.cs具有car和door类,等等。
我的问题对Java,C#,PHP或任何其他编程语言都有好处。我应该在同一个文件中尝试不包含多个类吗?
Answers:
我认为您应该尝试将代码保持为每个文件1类。
我建议这样做,因为以后再找您的课程会更容易。而且,它可以更好地与您的源代码管理系统一起使用(如果文件发生更改,则说明特定的类已更改)。
我唯一一次认为每个文件使用多个类是正确的,是在使用内部类时……但是内部类在另一个类中,因此可以保留在同一文件中。内部类角色与外部类密切相关,因此可以将它们放置在同一文件中。
每个文件一个类是一个很好的规则,但是适当地进行一些例外是合适的。例如,如果我正在一个项目中,大多数类具有关联的集合类型,那么通常我会将类及其集合保存在同一文件中,例如:
public class Customer { /* whatever */ }
public class CustomerCollection : List<Customer> { /* whatever */ }
最好的经验法则是每个文件都保留一个类,除非这样会使事情变得更难而不是容易。由于Visual Studio的“在文件中查找”是如此有效,因此您可能不必花费大量时间来查找文件结构。
我发现,每当我尝试将多种类型组合到一个文件中时,我总是会回头将它们分开并仅仅因为它们使它们更易于查找而已。每当我结合时,最终总会有片刻试图找出我定义的类型x的wtf。
因此,现在,我的个人规则是,每个单独的类型(子类可能除外,子类是指类内的类,而不是继承的类)都拥有自己的文件。
由于您的IDE为您提供了“导航到”功能,并且您可以对类中的命名空间进行一些控制,因此在同一个文件中包含多个类所带来的以下好处对我来说是非常值得的。
家长-子女班
在许多情况下,我发现在其基类文件中包含继承的类非常有帮助。
然后很容易查看子类继承哪些属性和方法,并且该文件提供了整体功能的快速概述。
公共:小型-助手-DTO类
当您需要几个普通类和小型类来实现特定功能时,我发现拥有一个包含所有引用的文件非常多余,并且只包含一个4-8 Liner类。
只需滚动一个文件而不是在10个文件之间切换,代码导航也变得更加容易。当您只需要编辑一个引用而不是10时,它也更易于重构。
总体上打破每个文件1类的Iron规则可以为组织代码提供更多的自由。
然后会发生什么,实际上取决于您的IDE,语言,团队沟通和组织技能。
但是,如果您想要那种自由,为什么要为铁腕统治而牺牲它?
从未来的发展和可维护性的角度来看,这可能是不好的。如果您有Car.cs类,则记住Car类的位置要容易得多。如果Widget.cs不存在,您将在哪里寻找Widget类?它是汽车部件吗?它是引擎小部件吗?哦,也许这是一个百吉饼小部件。
正如编程中很多时间都是如此,它很大程度上取决于情况。
例如,所讨论的类的凝聚力是什么?他们紧密耦合吗?它们完全正交吗?它们在功能上相关吗?
Web框架提供通用的widgets.w包含BaseWidget,TextWidget,CharWidget等的任何文件都不会过时。
框架的用户不会在定义more_widgets文件以包含其从框架小部件派生用于其特定域空间的其他小部件时脱颖而出。
当这些类是正交的并且彼此无关时,将分组到单个文件中确实是人为的。假设有一个应用程序来管理制造汽车的机器人工厂。一个名为零件的文件,其中包含CarParts和RobotParts将是毫无意义的……在维修备件的订购与工厂生产的零件之间似乎没有太多的关系。这样的连接不会增加有关您正在设计的系统的信息或知识。
最好的经验法则是不要以经验法则来约束您的选择。建立经验法则是为了进行初切分析,或限制那些无法做出好的选择的人的选择。我认为大多数程序员都希望相信他们能够做出正确的决定。