繁体   English   中英

您在课程中允许的最大方法的限制 N 是多少?

[英]What is the limit N of maximum methods you allow in your classes?

在填写Object 面向概念调查(为一些学术研究人员提供软件设计的真实数据)时,我遇到了这个问题:

您在课程中允许的最大方法的限制 N 是多少?

然后调查继续询问一旦达到这个限制 N,你是否重构你的类。

老实说,我在设计我的应用程序时从未考虑过这样的限制,并且想知道这背后的原因是什么。 为什么我想给自己设置一个可能非常依赖于类功能的任意数字?

您不必限制 N 的最大值。 但你必须遵循“高凝聚力”原则。 并且不要创建所有可以做任何事情的课程。

我想有一些 N 之后你应该开始担心。 但这实际上取决于 class 本身及其主要目标。

有一个神奇的数字可以作为规则的基础,这种想法通常来自那些渴望将秩序强加于宇宙的人超过他们的理智。

也就是说,如果您在 class 中有超过 20 种左右的方法,则很有可能它做得太多并违反了SRP

我也不会对事物进行任意限制,但我会说,一旦 class 超过 10-20 个公共方法范围内的某个位置,我会认真研究 class 正在做什么。 回到我的 J2EE 时代,我们称它们为 Enterprise Java Melons。

相同的规则适用于各个方法的长度。 我见过只有一两个方法的类,但每个方法都有数百行代码。

自从我开始将课程分解为单一职责以来,我通常不会接近它变得有问题的地方。

此外,一个设计良好的 class 可能有 30 种方法,而设计不佳的可能有 3 个(嗯,30 正在推动它,但重点是——这甚至不一定是一个好的指标,有点像计算 kloc)

您的框架/语言也可能需要很多没有业务逻辑的方法。

计算其中包含业务逻辑的重要方法的数量可能会很有趣——我会说大约 4 或 5 个是合适的。

当我查看源代码时,我很惊讶 JDK 类中实际上有多少方法,但是它们被破坏得如此之好,如此之小且如此易于阅读,以至于拥有 20 个根本不是问题。

就像其他人指出的那样,通常没有任意数量的方法,此时我会说“方法太多了”,有时相反的情况可能同样糟糕。 例如,当 object 具有跨越数百行的单片全能方法时。

话虽如此,如果我打开一个我以前没有看过的源文件并看到超过 10-20 种方法,我可能会扫描它,看看它是否不能以某种方式重构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM