2010-02-08 46 views
21

When is a function too long?是这个问题的一个子集,我想。什么时候课时太长?

确定班级时间过长的几个很好的指标是什么?

我重新为外部承包商的项目重新制定了一套代码验收准则,并意识到我以前没有涉及过这个问题,但应该在将来讨论这个问题。

+0

什么语言?我认为Java和Scala的答案不同。在后一种情况下,班级通常(并应该!)缩短。 – 2010-02-08 16:00:38

+0

看看这个问题 - http://stackoverflow.com/questions/849557/in-c-how-many-lines-before-a-class-should-be-consider-to-be-re- exored/ – 2010-02-08 16:04:00

+0

密切关注相关问题:http://stackoverflow.com/questions/1086851/good-practice-class-line-count/1086865#1086865 – sleske 2010-02-09 08:59:49

回答

61

当它有多个责任。

让我引用罗伯特·C·马丁的Clean Code这里:

类的第一条规则是,他们应该是很小的。第二类规则是它们应该小于这个规则。 ...用 函数我们通过计算物理线来测量大小。有了课程,我们 使用不同的措施。我们计算责任。 [第10章,第136页]

+3

+1顶部答案先生。 – Matt 2010-02-08 16:10:46

+0

这显然不是真的。你有没有使用CRC(班级,责任,合作者)卡片 - 在面向对象设计中使用的经典工具之一?每张卡片都有一个单独的类别和一系列重要的职责。 – 2010-02-08 16:19:44

+0

@Neil,我认为从80年代开始的OO设计方法并没有包含从那以后获得的大量经验。这些卡的概念似乎仍然有用,所以感谢您提及它们! – Thorsten79 2010-02-08 16:22:46

2

一类应该只有一个责任。这是一个比它的长度更好的衡量标准。所以,在设计你的代码时,你的设计的每个单元(一个类型或一个类)只应该对一件事负责(不管你的情况是“一件事”)。 如果你尽可能简单,你不会陷入混乱。

1

当你认为现在对你来说管理它变得越来越困难并且让你陷入困境。

+0

我正在试图为他人遵循一个标准;我有几个3000+的线上课,虽然我想向他们解释这是一个糟糕的主意,但我正在设定规则,以防止我在将来扮演支持者的角色。 – 2010-02-09 15:33:15

1

忽略正在使用的设计模式,我会考虑班级实现的责任范围。如果范围太大,应该将其分解为具体的职责,抽象出来,或者更通用。

我实际上不会将行数作为有意义的度量。

+0

一点也不担心“代码行”作为度量标准,只是试图找到更有意义的度量标准来取代它。 – 2010-02-09 15:34:07

10

不超过17行。没有更多,不少。所以如果是17线以下的话回车就会诀窍。如果超过17个,您需要从该函数内开始调用其他函数。

例如:

public function myFunction() { 
... 
line 17: myFunctionPart2(); 
} 

public function myFunctionPart2() { 
... 
line 17: myFunctionPart3(); 
} 

等。

它非常标准的编程习惯。

+1

他在询问班级......不是功能。一班17行不会太小。 – 2010-02-08 16:32:49

+5

哦,对于类,限制是19行。 – wowcat 2010-02-08 16:34:41

+6

+1,因为这很有趣。 – Steven 2010-02-08 18:30:52

15

类扇出复杂度:给定类依赖的其他类的数量。此外,这个平方至少表示功能程序(以文件为基础)所需的维护量。

环复杂度:检查圈指数的复杂性是否超出指定限制。复杂性是通过if,while,do,for,?,catch,switch,case语句和运算符的数量来衡量的。 (加一)在构造函数,方法,静态初始值设定项或实例初始值设定项的主体中。它是通过源的可能路径的最小数量的度量,因此是所需测试的数量。一般认为1-4是好的,5-7好,8-10考虑重新分解,现在11+重新考虑因素!

+0

回顾今年以后;圈复杂度是一个很好的一阶近似,但仅测试每个单独的方法,并且通常是一个红鲱鱼;它正在测量代码难度,但是你真正想知道的是在那里有多少难度。 (如果原因很复杂,编写复杂的代码是可以的;如果中间复杂的代码很简单,编写代码就不好!) – 2015-07-12 04:59:45

相关问题