Фабрика или конструктор - где установить свойства объекта? - PullRequest
1 голос
/ 02 октября 2011

Меня немного смущает, что является правильным местом для установки свойств объекта, в конструкторе или в фабричном методе, или это не имеет значения?

В конструкторе:

class Foo {
    public $bar;
    function __constructor($b) {
        $this->bar = $b;
    }

    static function factory($b) {
        return new self($b);
    }
}

На фабрике:

class Foo {
    public $bar;    

    static function factory($b) {
        $obj = new self();
        $obj->bar = $b;
        return $obj;
    }
}

1 Ответ

0 голосов
/ 02 октября 2011

Вопрос в том, можете ли вы создать экземпляр класса без установки свойства b . Если это сработает, вам не нужно устанавливать свойство в конструкторе. Если свойство важно для работы других методов, вы должны установить его в конструкторе. Фабрика не имеет к этому никакого отношения. Если фабрика была единственным способом создания экземпляра класса (конструктор был закрытым), тогда код был бы инкапсулирован, но все же вам нужно передать необходимые параметры конструктору, иначе вы можете легко забыть о них при рефакторинге кода .

...