69 lines
2.7 KiB
PHP
69 lines
2.7 KiB
PHP
<?php
|
||
|
||
namespace Modules;
|
||
|
||
use Modules\Tasks\Factory as TasksFactory;
|
||
use Modules\Tasks\Interfaces\IModulesProvider as ITasksModulesProvider;
|
||
|
||
use Modules\OtherModule\Factory as OtherModuleFactory;
|
||
use Modules\OtherModule\Interfaces\IModulesProvider as IOtherModulesProvider;
|
||
|
||
/**
|
||
* Класс ModulesProvider реализует интерфейсы провайдеров модулей.
|
||
* Служит централизованным поставщиком фабрик модулей с ленивой инициализацией.
|
||
*/
|
||
class ModulesProvider implements ITasksModulesProvider, IOtherModulesProvider
|
||
{
|
||
/** @var TasksFactory|null Экземпляр фабрики задач (ленивая инициализация) */
|
||
private ?TasksFactory $tasksFactory = null;
|
||
|
||
/** @var OtherModuleFactory|null Экземпляр фабрики другого модуля (ленивая инициализация) */
|
||
private ?OtherModuleFactory $otherModuleFactory = null;
|
||
|
||
/**
|
||
* Получает экземпляр фабрики задач.
|
||
* Реализует ленивую инициализацию (создание при первом обращении).
|
||
*
|
||
* @return TasksFactory Экземпляр фабрики задач
|
||
*/
|
||
public function getTasksModule(): TasksFactory
|
||
{
|
||
// Если фабрика уже создана - возвращаем её
|
||
if ($this->tasksFactory) {
|
||
return $this->tasksFactory;
|
||
}
|
||
|
||
// Ленивая инициализация фабрики
|
||
$this->tasksFactory = new TasksFactory();
|
||
|
||
// Настройка фабрики
|
||
$this->tasksFactory->loadSettings([
|
||
TasksFactory::TASKS_TABLE => 'tasks', // Установка таблицы задач
|
||
]);
|
||
|
||
// Инъекция зависимостей (передача текущего провайдера модулей)
|
||
$this->tasksFactory->injectModules($this);
|
||
|
||
return $this->tasksFactory;
|
||
}
|
||
|
||
/**
|
||
* Получает экземпляр фабрики другого модуля.
|
||
* Также использует ленивую инициализацию.
|
||
*
|
||
* @return OtherModuleFactory Экземпляр фабрики другого модуля
|
||
*/
|
||
public function getOtherModule(): OtherModuleFactory
|
||
{
|
||
// Если фабрика уже создана - возвращаем её
|
||
if ($this->otherModuleFactory) {
|
||
return $this->otherModuleFactory;
|
||
}
|
||
|
||
// Ленивая инициализация фабрики
|
||
$this->otherModuleFactory = new OtherModuleFactory();
|
||
|
||
return $this->otherModuleFactory;
|
||
}
|
||
}
|