因此,环顾四周,我注意到一些关于长方法是不好的做法的评论。
我不确定我是否总是同意长方法是不好的(并希望别人提出意见)。
例如,我有一些Django视图,在将对象发送到视图之前会对其进行一些处理,一个长方法是350行代码。我编写了代码,以便处理参数-对查询集进行排序/过滤,然后对查询返回的对象进行一点点处理。
因此,处理主要是条件聚合,它具有足够复杂的规则,无法在数据库中轻松完成,因此我在主循环外部声明了一些变量,然后在循环期间对其进行了更改。
variable_1 = 0
variable_2 = 0
for object in queryset :
if object.condition_condition_a and variable_2 > 0 :
variable 1+= 1
.....
...
.
more conditions to alter the variables
return queryset, and context
因此,根据理论,我应该将所有代码分解为较小的方法,以使视图方法的最大长度为一页。
但是,过去曾经在各种代码基础上工作过,当您需要不断地从一种方法跳转到另一种方法来查明代码的所有部分,同时又将最外层的方法放在脑海中时,有时会发现它使代码的可读性降低。
我发现拥有一个格式合理的长方法,您可以更轻松地看到逻辑,因为它不会被内部方法隐藏。
我可以将代码分解为较小的方法,但是通常会有一个内部循环用于两三件事,因此这会导致代码更复杂,或者方法只会做两三件事而不做一件事(或者我可以为每个任务重复内部循环,但是这样会影响性能。
那么是否存在长方法并不总是不好的情况?当只在一个地方使用这些方法时,总会有一种情况吗?
更新:好像一年多以前我问了这个问题。
因此,在这里(混合)响应之后,我重构了代码,将其拆分为方法。这是一个Django应用,可从数据库中检索复杂的相关对象集,因此测试参数不可用(可能一年中的大部分时间都需要为测试用例创建相关对象。我有一个“昨天需要做的事情”类型)工作环境,然后再抱怨)。现在,修复该代码部分中的错误现在稍微容易一些,但并不是那么容易。
之前:
#comment 1
bit of (uncomplicated) code 1a
bit of code 2a
#comment 2
bit of code 2a
bit of code 2b
bit of code 2c
#comment 3
bit of code 3
现在:
method_call_1
method_call_2
method_call_3
def method_1
bit of (uncomplicated) code 1a
bit of code 2a
def method_2
bit of code 2a
bit of code 2b
bit of code 2c
def method_3
bit of code 3