(注意:这与这个问题有关,但我认为它可以写得更清楚,所以我再试一次——我的更新只有有限的帮助。)
我继承了一些代码,创建了一个复杂的表单,包含许多部分和许多可能的视图,取决于许多参数。我已经在使用它一段时间了,并最终有机会考虑进行一些重构。它目前是以过程方式编写的,具有一堆看起来像这样的函数:
传递这些参数很麻烦,所以我开始编写一个像这样的类:
问题在于过程函数被分成了几个文件(针对一些部分),如果我将它们全部合并到一个单独的类文件中,那么我会得到 2500 行代码,这感觉不太好处理。我想过几种解决方案:
还有其他方法吗?哪种方法更好?
我继承了一些代码,创建了一个复杂的表单,包含许多部分和许多可能的视图,取决于许多参数。我已经在使用它一段时间了,并最终有机会考虑进行一些重构。它目前是以过程方式编写的,具有一堆看起来像这样的函数:
get_section_A ($type='foo', $mode='bar', $read_only=false, $values=array()) {
if ($this->type == 'foo') {
if ($this->mode == 'bar') { }
else { }
} else { }
}
传递这些参数很麻烦,所以我开始编写一个像这样的类:
class MyForm {
public $type; // or maybe they'd be private or
public $mode; // I'd use getters and setters
public $read_only; // let's not get distracted by that :)
public $values;
// etc.
function __constructor ($type='foo', $mode='bar', $read_only=false, $values_array=array()) {
$this->type = $type;
// etc.
}
function get_sections () {
$result = $this->get_section_A();
$result .= $this->get_section_B();
$result .= $this->get_section_C();
}
function get_section_A() {
if ($this->type == 'foo') { }
else { }
}
function get_section_B() {}
function get_section_C() {}
// etc.
}
问题在于过程函数被分成了几个文件(针对一些部分),如果我将它们全部合并到一个单独的类文件中,那么我会得到 2500 行代码,这感觉不太好处理。我想过几种解决方案:
- 忍受难看的参数,把时间用在其他事情上 :)
- 忍受有 2500 行的文件
- 为每个部分组创建一个单独的类,以某种方式“知道”这些参数的值
- 将 MyForm 对象作为单个参数传入
- 创建一个 FormSectionGroup 类,并设置静态属性,然后在组文件中,每个类都将扩展 FormSectionGroup 并自动访问这些参数的当前值。
get_section_A()
,无论我是说 $this->type
还是 $myForm->type
都没有太大区别,但它并不完全是面向对象的。(实际上,我可以在不真正转换为面向对象的方法下这样做。)还有其他方法吗?哪种方法更好?