Должен ли объект «загружать» другой объект сам по себе, или другой передан ему? - PullRequest
1 голос
/ 26 сентября 2011

Полезно ли загружать другой объект изнутри исходного объекта, например:

Class parent() {

    $child;

    function loadChild() {
        $child = new Child();
        $this->child = $child;
    }
}

или, дочерний объект всегда должен передаваться отдельно?

Class parent() {

    $child;

    function setChild(child $child) {
        $this->child = $child;
    }
}

$parent = new Parent();
$child = new Child();
$parent->setChild($child);

Какой вариант лучше, более гибкий и т.д.?

Ответы [ 3 ]

4 голосов
/ 26 сентября 2011

Зависит от ситуации.

Название второго объекта предполагает, что

  1. экземпляр Child будет использоваться только экземпляром Parent
  2. не должен жить дольше, чем Parent экземпляр

Если это так, то первый шаблон ( Шаблон композиции объекта ) лучше.

Если экземпляр Child необходим / используется в других местах вашего кода, второй шаблон ( Внедрение зависимости ) более уместен. Внедрение зависимостей - это более гибкий шаблон, если вы не уверены в своем сценарии использования, вам, как правило, следует использовать Внедрение зависимостей.

4 голосов
/ 26 сентября 2011

Второй вариант более уместен.Это называется Внедрение зависимости .Одна из главных причин этого заключается в том, что вы можете передавать любой объект, который реализует интерфейс child (включая фиктивный объект, который важен для TDD) без необходимости изменять ваш класс.

1 голос
/ 26 сентября 2011

Зависит от того, что вы хотите.Если вы уверены, что вам не нужно менять ребенка, вы можете создать его в объекте.Меньше кода => меньше ошибок.Но если вы захотите потом иметь других детей, это будет плохо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...