(注:这是关系到this question,但我认为它可能已被写入更清楚,所以我试图再次 - 我只更新帮助有限的程度。)最好的方法(程序OOP的?)
我继承一些代码,创建与众多部分的复合物的形式,和大量的可能的视图,这取决于许多参数。我一直在使用它一段时间,最后有机会考虑做一些重新分解。它是目前写的程序上,有一堆的功能看起来像这样:
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线文件
- 创建一个单独的类为每个组部分以某种方式“知道”
如果我做的#3,我想过的两种基本方法的参数值:
- 将MyForm对象作为单个参数传入
- 创建一个具有在MyForm中设置的静态属性的FormSectionGroup类,然后在组文件中,每个类将扩展FormSectionGroup并自动访问这些参数的当前值。
1)可能是更容易建立,有一次我在里面get_section_A()
是否我说$this->type
或$myForm->type
是不是所有的不同的,但它不是完全面向对象的。 (事实上,我能做到这一点并没有真正改变到一个面向对象的方法。)
还有没有其他的方法?想想哪个更好?
谢谢,彼得,我会看看那个。 – sprugman 2009-12-17 23:26:41