(Примечание: это относится к этому вопросу , но я думаю, что он мог бы быть написан более четко, поэтому я пытаюсь снова - мое обновление помогло только в ограниченной степени.)
Я унаследовал некоторый код, который создает сложную форму с многочисленными разделами и множеством возможных представлений, в зависимости от ряда параметров. Я работал с ним некоторое время, и, наконец, у меня появилась возможность подумать о некотором ре-факторинге. В настоящее время он написан процедурно, с кучей функций, которые выглядят так:
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 как один параметр
- создайте класс FormSectionGroup со статическими свойствами, которые устанавливаются в MyForm, затем в файлах групп каждый класс расширяет FormSectionGroup и автоматически получает доступ к текущим значениям этих параметров.
1), вероятно, проще в настройке, и как только я окажусь внутри get_section_A()
, скажу ли я $this->type
или $myForm->type
, это не так уж и отличается, но это не совсем ООП. (На самом деле, я мог бы сделать это, не переходя на ООП-подход).
Есть ли другие подходы? Мысли о том, что лучше?