Класс Cot. Фасад (Facade) в Cotonti

Фасад (Facade) — это паттерн проектирования, который предоставляет упрощённый интерфейс для работы с более сложной системой. В контексте фреймворка Cotonti и этого конкретного класса, фасад предоставляет доступ к ключевым глобальным объектам и данным фреймворка через один интерфейс, скрывая сложность работы с этими данными.

Как этот класс работает как фасад:

Класс Cot

Этот класс является фасадом для глобальных объектов и данных, таких как кэш, конфигурация, база данных, таблицы и другие системные ресурсы в фреймворке Cotonti. Он предоставляет удобный доступ к этим данным через статические свойства, упрощая их использование в различных частях приложения.

1. Объявление свойств класса

 

public static $cache;
public static $cfg;
public static $db;
public static $db_x;
public static $env;
public static $extrafields;
public static $L;
public static $out;
public static $R;
public static $structure;
public static $sys;
public static $usr;

 

Эти статические свойства представляют собой ссылки на важнейшие глобальные переменные и объекты системы Cotonti.


 

$cache — кэш системы.
$cfg — конфигурация системы.
$db — объект для работы с базой данных.
$db_x — префикс таблиц базы данных.
$env — настройки окружения.
$extrafields — дополнительные поля.
$L — строки локализации.
$out — строки вывода, например, для HTML.
$R — ресурсы.
$structure — структура данных.
$sys — системные переменные.
$usr — информация о текущем пользователе.


2. Метод init()

public static function init()
{
    global $cache, $cfg, $cot_extrafields, $db, $db_x, $env, $L, $out, $R, $structure, $sys, $usr;


Метод init() выполняет инициализацию статических свойств класса, присваивая им значения глобальных переменных фреймворка.
Это важный момент, так как все эти глобальные переменные теперь доступны через статический класс Cot, что упрощает доступ к ним из любой части приложения.

    self::$cache       =& $cache;
    self::$cfg         =& $cfg;
    self::$db          =& $db;
    self::$db_x        =& $db_x;
    self::$env         =& $env;
    self::$extrafields =& $cot_extrafields;
    self::$L           =& $L;
    self::$out         =& $out;
    self::$R           =& $R;
    self::$structure   =& $structure;
    self::$sys         =& $sys;
    self::$usr         =& $usr;
    


    
Здесь мы видим, что глобальные переменные присваиваются статическим свойствам класса Cot через ссылку (&).
Теперь, вместо того чтобы напрямую использовать глобальные переменные в различных частях кода, мы можем просто обратиться к этим данным через класс Cot:

Пример: Cot::$cfg вместо $cfg.

 

    // Register core DB tables
    // On the first step of installer it is not initialized yet
    if (!(empty($db) && isset($env['location']) && $env['location'] == 'install')) {
        $db->registerTable('auth');
        $db->registerTable('cache');
        $db->registerTable('cache_bindings');
        $db->registerTable('core');
        $db->registerTable('config');
        $db->registerTable('groups');
        $db->registerTable('groups_users');
        $db->registerTable('logger');
        $db->registerTable('online');
        $db->registerTable('extra_fields');
        $db->registerTable('plugins');
        $db->registerTable('server_events');
        $db->registerTable('server_events_observers');
        $db->registerTable('structure');
        $db->registerTable('updates');
        $db->registerTable('users');
    }
    


В этом блоке метод регистрирует основные таблицы в базе данных, что необходимо при первой инициализации фреймворка. Эти таблицы зарегистрированы через объект базы данных $db.

    // Fill some variables with default values
    // May be isset() is not needed
    if (!isset(self::$out['head'])) {
        self::$out['head'] = '';
    }
    if (!isset(self::$out['subtitle'])) {
        self::$out['subtitle'] = '';
    }
    if (!isset(self::$env['ext'])) {
        self::$env['ext'] = null;
    }
}

 

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


Что значит "Фасад"?

Фасад (Facade) в данном контексте — это класс, который служит обёрткой или интерфейсом для доступа к множеству сложных внутренних механизмов фреймворка, таким как глобальные объекты и переменные. Вместо того чтобы напрямую работать с глобальными переменными, класс Cot предоставляет централизованный и упрощённый способ обращения к этим данным. Это позволяет разработчикам проще взаимодействовать с фреймворком, избегая многократных ссылок на глобальные переменные и обеспечивая более чистый и удобный код.

Использование фасада упрощает архитектуру приложения, делает её более гибкой и удобной для понимания и тестирования, так как сложные внутренности фреймворка скрыты за простым интерфейсом.

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 21.01.2025 08:27
  • Последнее обновление: 21.01.2025 08:31

Похожие страницы

Класс Cotpl_logical в Cotonti. Блоки (IF, ELSE, ENDIF)
1 Этот класс Cotpl_logical в Cotonti предназначен для работы с условными конструкциями (IF, ELSE, ENDIF) в шаблонизаторе