Правильная реализация шаблона Factory в переполнении стека

У меня есть вопрос о правильном способе реализации фабричного шаблона в PHP, который используется для создания экземпляров сложных объектов с их зависимостями. Давайте предположим, что у фабричного класса есть метод ‘build’, так что, например, класс User создается следующим образом:

$factory->build('User');

Класс User должен извлекать пользовательские данные из хранилища (базы данных), поэтому он зависит от объекта Repository — конструктор выглядит так:

public function __construct(Repository $repository);

Это означает, что метод ‘build’ фабрики должен вызывать что-то вроде этого

$user = new User(new Repository());

Теперь давайте предположим, что мне также нужно создать экземпляр объекта HomeController, который отображает содержимое на домашней странице. Он извлекает список последних статей — чтобы отобразить их на домашней странице, поэтому ему также необходим объект репозитория. Так что метод сборки будет вызывать что-то вроде этого:

$home = new HomeController(new Repository());

Итак, теперь ясно, что у нас есть два экземпляра объекта Repository, хотя на самом деле одного экземпляра в этом случае вполне достаточно. Поэтому мне было интересно, будет ли хорошей практикой для фабричного шаблона действительно регистрировать экземплярный объект Repository (сохраняющий его в массиве $ selectedObjects объекта Factory) и возвращать его из таблицы, если он был создан ранее. Таким образом, создание объекта в методе сборки будет выглядеть так:

$user = new User($this->build('Repository'));  // Here Repository is created first time.
$home = new HomeController($this->build('Repository'));  //Here it is retrieved from list of already registered objects

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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]