(注:這是關係到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