在一个文件中有多个类定义是不是很好的做法?或者每个文件最好有一个类?在一个文件中有多个类定义是不是很好的做法?
回答
我更喜欢每个文件一个类。您永远不必搜索正确的文件名,因为它始终是类名称。
我认为这是最好有每个文件一个类,并组织他们在具有相同的层次结构,作为命名空间的文件夹。
大多数程序员会认为每个文件一个类是最佳实践。
通常最好的做法是每个类有一个文件。
有些人,不是我喜欢有不止一个,如果他们是相关的,非常非常小的规模。其他人可能会在原型阶段做到这一点。我说开始,留在每一个文件作为他的重要著作Code Complete
引述确实斯科特·麦康奈尔在他的授课质量话语,“把一个类在一个文件中,文件是不只是持有桶一些代码如果你的语言允许的话,一个文件应该包含一个只支持一个目的的例程集合,一个文件强化了一个例程集合在同一个类中的想法。
每个文件一个类。
这样你可以避免合并编辑时,两个人编辑同一个文件,因为一个正在class A
和其他正在class B
。虽然这在任何源代码控制系统中都应该是自动的,但这是一个额外的步骤,可能会被错过,这会导致问题。
远东最好是有一个过程,不允许摆在首位出现这种错误。
您不应该手动合并编辑,因为两个人在同一个文件的不同部分工作。如果你这样做,也许是时候换一个新的版本控制系统了。 – 2009-10-16 09:00:53
@Matthew - 同意,但这是一个额外的步骤,没有必要,并且会在有人忘记在检查编辑之前忘记执行合并时不时出现问题。 – ChrisF 2009-10-16 09:03:28
我不能说其他版本控制系统,因为我独占使用Subversion,但svn处理自动合并,除非编辑文件中的相同部分(即两个人编辑当前签入文件的第54行) – 2009-10-16 09:10:28
通常 - no。 以下练习“每个文件一个类”简化了解决方案的浏览。 此外,如果您有一个使用悲观方法(独占锁)的开发人员和源代码管理工具的大型团队 - 开发人员在处理同一个文件时将遇到困难。
只要类是相互关联的,我不会在同一个文件中看到多个类的问题。
如果你有resharper,你可以随时使用导航工具找到任何类。
+1同意,并非所有类都需要处于独立单位。 – James 2009-10-16 08:51:30
+1 Resharper否定导航问题(ctrl T)。 – 2009-10-16 08:53:17
不是每个人都有,或者甚至可以使用Resharper(例如Express版) – 2009-10-16 08:58:17
我会说不,我知道的DevExpress讨厌它藏汉(它有一些不好的检测practives)。
,但我有有时,当它的一个非常小的类多数民众赞成basicly只能由文件中的“主”类中使用。 Personaly我认为它有点味道,有一个10K行长的.cs文件或在你的项目中有许多.cs之间的平衡。
我想这是根据您的偏好。 我想你会发现大多数在线示例/大多数代码是每个文件一个类,便于管理。
我有时会把2班在一个文件 - 只有当我使用的第二类作为一个实体,它只是作为一个在第一类中使用。
我认为它是一种“最佳实践”方法,那么很可能是。但是,这实际上取决于项目。我倾向于将相关代码放到独立的单元,例如:
MyApplication.Interfaces
MyApplication.Utils
MyApplication.Controllers
我真的觉得一个类只有永远值得它自己的单位,如果它变得巨大。但是,如果它达到了这个阶段,你应该开始考虑将一些代码移入辅助类来分离逻辑。
我想你问,因为你已经注意到,它被认为是最佳实践。鉴于显而易见的好处(以及这里提到的一些不那么明显的好处),为什么你想要以不同的方式做呢?每个文件在多个类中是否有任何好处?我想不出任何。
你是对的,我一直认为最好的做法是每个文件有一个类,但是如果不是这种情况,我似乎会遇到越来越多的代码。即使是由行业专家编写的代码。 – 2009-10-16 08:51:47
行业专家不一定是维护代码的专家。 – 2009-10-17 15:14:05
这在演示代码等方面并不少见,有时这样更方便。使用演示代码,便利胜过其他考虑因素。 – 2009-10-18 20:14:55
通常这是最好的解决方案,每个文件有一个类(文件的命名与包含的类完全相同)。
我只不同从,如果
- 有很多小枚举 - >我收集这些成一个单一的文件如Enums.cs
- 有很多(20+)生成的类/接口彼此直接相关 - >将一个文件E.g. Interfaces.cs
- 有些东西不是应用程序的直接功能部分,而是紧密语义上的一致性(比如你需要的所有内容,通常是一些结构,枚举,常量和一个类) - >以interop类命名的单个文件。
- 专用内部类 - >留在他们的父类,而不是局部类
我会用最就此达成一致。每个文件一个类是理想的。它可以让您更轻松地查看项目中可用的内容,而无需依赖智能感知来发现给定程序集中可用的类型。
我认为唯一一次我对每个文件规则中的一个类进行fudge的时候是我定义了一个自定义的EventArgs类,并且它与从另一个类中触发的事件有关。然后,通常我会在同一个文件中将这些定义与该事件的委托一起定义。我不知道这是一种好的做法,还是出于纯粹的懒惰?
由于'EventHandler
如果您在一个非常大的项目上工作,太多的文件会显着减慢构建时间(至少使用C++)。我不认为严格遵守规则是必然的。
一类每个文件是我的首选方法,它可以帮助我摆脱任何混乱后来......我倾向于使用了很多,虽然部分类的......
只要我不打破1000线障碍,我会填入许多相关的类,这是有道理的。
有时抽象可能只是一个重写的方法。
- 1. 在同一个文件中有多个类是不好的做法吗?
- 2. 在一个表中有几个外键是不是很好的做法?
- 3. 它是一个很好的做法,同一列的多个表
- 4. 在一个文件中有两个AsyncTask内部类是不好的做法吗?
- 5. 在xCode项目中有多个* .xcodeproj文件是否是一种好的做法?
- 6. 在卡桑德拉有多个密钥空间是不是很好的做法?
- 7. 在同一个文件中声明新的类是不是很好的“形式”?
- 8. 它是很好的做法,定义特定条件
- 9. 是定位与JavaScript一个很好的做法
- 10. 这个网址是无效的,不是很好的做法?
- 11. jQuery插件 - 这是一个很好的做法吗?
- 12. 做不好有一个HTML元素很多类?
- 13. 在类中定义ID属性是一种好的做法吗?
- 14. if else在类构造函数中的条件......是不是很好的做法?
- 15. 是@unlink一个不好的做法?
- 16. POJO中的泛型 - 这是一个很好的做法
- 17. 它是一个很好的做法,使用'的Response.Redirect()``中Global.asax`
- 18. 有一个很长的初始化方法是不好的做法吗?
- 19. 是否有一个很好的方法来定义catch块是否运行?
- 20. Java:在XML中定义bean是否是一种好的做法?
- 21. 在Python的另一个类中定义一个类是否有好处?
- 22. 在多个CCTMXTiledMaps中共享CCTextureAtlas是否有很好的方法?
- 23. 是否有一个带有很多DLL的应用程序是不好的做法?
- 24. Fk在不同的模式中,这是一个很好的做法吗?
- 25. 是不是很好,每个PHP类实现一个Singleton模式
- 26. 在内函数之后定义一个变量是一种不好的做法?
- 27. 在PHP中使用exec是不是很好的做法?
- 28. 在类方法中定义一个函数是不是pythonic?
- 29. 是不是很好的做法,为不同的目的有很多用户控件
- 30. “如果”与转让是一个很好的做法?
好的,但嵌套类呢?继每个文件策略一个类之后,你会让主类变得部分吗?那么你会有MainClass.cs和MainClass.NestedClass.cs ... – ParmesanCodice 2009-10-16 08:50:20
而且?你想说什么?实际上,我经常在这种情况下为MainClass创建一个文件夹,尤其是对于大型静态类。私有嵌套类不(总是)需要他们自己的文件,但公共的文件应该。 – 2009-10-16 08:57:15
我不想提出任何观点,我在问蒂姆他是如何严格遵守每个文件策略的一类关于嵌套类的。 – ParmesanCodice 2009-10-16 09:01:39