exampleapp/modules/ModulesProvider.php

69 lines
2.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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;
}
}