When is a function too long?是这个问题的一个子集。
确定某个课程太长的一些好指标是什么?
我正在为一个与外部承包商合作的项目重新制定一套代码验收指南,并意识到我过去没有涉及这个问题,但是应该在将来讨论这个问题。
答案 0 :(得分:63)
当它有多个责任时。
让我引用罗伯特C.马丁的Clean Code来这里:
课程的第一条规则是它们应该很小。第二 类的规则是它们应该小于那个。 ......随着 函数我们通过计算物理线来测量大小。我们上课 使用不同的措施。我们承担责任。 [第10章,第136页]
答案 1 :(得分:16)
类扇出复杂度:给定类依赖的其他类的数量。此外,这个方块已经显示出至少表示功能程序(基于文件)所需的维护量。
圈复杂度:根据指定的限制检查圈复杂度。复杂性的衡量标准是if,while,do,for,?:,catch,switch,case语句和运算符&&和|| (加一)在构造函数,方法,静态初始化程序或实例初始化程序的主体中。它衡量通过源的最小可能路径数量,从而衡量所需测试的数量。通常1-4被认为是好的,5-7好,8-10考虑重新分解,现在11 +重新因子!
答案 2 :(得分:9)
不超过17行。不多也不少。所以,如果是17行以下,回车就可以了。如果它超过17,你将需要从函数内部开始调用其他函数。
例如:
public function myFunction() {
...
line 17: myFunctionPart2();
}
public function myFunctionPart2() {
...
line 17: myFunctionPart3();
}
等等。
它非常标准的编程实践。
答案 3 :(得分:3)
一个班级应该只有一个责任。这是一个比其长度更好的衡量标准。因此,在设计代码时,设计的每个单元(类型或类)应该只负责一件事(无论你的情况是“一件事”)。 如果你保持尽可能简单,你就不会陷入困境。
答案 4 :(得分:2)
忽略使用中的设计模式,我会考虑课程所承担的责任范围。如果范围太大,则应将其分解为具体职责,抽象出来,或使其更具通用性。
我实际上并不会将行数作为有意义的指标。
答案 5 :(得分:1)
当你认为现在你变得更难以管理并让你陷入困境时。