Сервисы


Фреймворк построен по принципу SOA (Сервис-ориентированной архитектуры). Это значит, что в ядре находится самый минимум функционала, необходимый для запуска приложения, его конфигурации, роутинга и управления остальным функционалом. Весь остальной функционал представлен отдельными компонентами (сервисами).

Сервисы, это сконфигурированные и подготовленные библиотеки, доступные в любой части программы. Причем инициализация такой библиотеки происходит только в момент обращения к ней, что позволяет экономить память.

Есть два варианта инициализировать сервис. Статический, и из общего контейнера. Кроме того, сервис можно получить как новый экземпляр, так и расшаренный по принципу Singleton.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

// Статический доступ 

    // Новый экземпляр сервиса 
    
$urlManager ABC::newService(ABC::URI_MANAGER);     
    
// Получаем сервис по принципу "Синглтон" 
    
$mysqli ABC::sharedService(ABC::MYSQLI); 
     
// Динамический из внутреннего контейнера 

    // Обычный 
    
$paginator $this->abc->newService(ABC::PAGINATOR); 
    
// Расшаренный (общий) 
    
$pdo $this->abc->sharedService(ABC::PDO); 




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

На сегодняшний день доступны следующие сервисы:
Имя Описание Константа
1 Params Доступ к параметрам ABC::PARAMS
2 Container Контейнер зависимостей ABC::CONTAINER
3 Storage Хранилище данных ABC::STORAGE
4 ValueObject Value Object ABC::VALUE_OBJECT
5 Http HTTP (PSR-7) ABC::HTTP
6 Pipe Middleware с поддержкой PSR-15 ABC::PIPE
7 UriManager Сервис для генерации URI и ссылок ABC::URI_MANAGER
8 Mysqli Драйвер СУБД MySQLi ABC::MYSQLI
9 Pdo Драйвер СУБД PDO ABC::PDO
10 DbCommand Конструктор запросов ABC::DB_COMMAND
11 Template Шаблонизатор ABC::TEMPLATE
12 TplNative Сервис работы с нативными шаблонами ABC::TPL_NATIVE
13 Vaidator Валидатор ABC::VALIDATOR
13 Paginator Постраничная навигация ABC::PAGINATOR
14 Mailer Почтовый класс ABC::MAILER
15 BbDecoder Конвертор BB-кодов ABC::BB_DECODER


Как работать с ними описано в соответствующих разделах.