Идеи и подходы - Концепция Core I

Прежде всего, хочу оговориться, что концепция Core и MicroCore не имеет никакого отношения к микроядерному и монолитному подходу в создании операционных систем, и ни к какому прочему подходу со схожими названиями. Core - это лишь имя методики, оно не несёт на себе такой смысловой нагрузки.
В остальном же - сам подход есть лишь мысли и философия.

Теория подхода



Основным положением подхода Core I в проектировании AlterCMS был принцип модульности. В идеале, система должна представлять из себя набор свяанных между собой независимых модулей трёх типов - собственно ядро, системные модули ядра и рабочие пользовательские модули.
Собственно ядро представляет из себя центральный исполняемый файл. В его задачи входит соединение вместе всех остальных модулей и сборка основного движка cms на лету из системных модулей.
Системные модули подразделяются условно на две категории - независимые и зависимые. Независимые модули предоставляют системе базовые функции, такие как обработчик базы данных или шаблонов страницы, и не нуждающиеся в присутствии других модулей. Зависимые модули, соответственно, требуют подключения независимых модулей. Они обеспечивают дополнительные cmsAPI, такие как комментирование, ленты rss, статистику, которые активно используют базовые функции.
Пользовательские модули отвечают за весь функционал системы, который доступен посетителям сайта. Эти модули отличаются полной независимостью друг от друга, и могут быть подключены и отключены от системы, не влияя на работоспособность других частей.

Если делать вывод, то концепция Core I заключается в следующих принципах...
- Система разделяется на три уровня: ядро, системные модули ядра и cmsAPI, и пользовательские модули
- Ядро обеспечивает пользовательские модули набором необходимых объектов и API
- Пользовательские модули независимы друг от друга и опираются только на модули ядра

Применение на практике



Эти принципы были взяты за основу при проектировании системы AlterCMS Core I.
Ядро системы состоит из двух файлов - index.php и core.php. Файл core отвечает за сборку ядра из базовых модулей. Он подключается к себе файлом index. Последний же отвечает за сборку в единое целое всех активных пользовательских модулей и выбор текущего исполняемого файла. После определения требуемого файла управление передаётся ему.
Модули ядра действительно поделились на независимые и зависимые модули. В список независимых входят инициализатор, объект базы данных с файлом конфигурации, объект выходного шаблона, файл функций и файл констант. Эти файлы реализуют базовый набор cmsAPI (smartDate, createPageLine, ...) и объектов (db, template, lang, ...), используемый всеми остальными модулями системы. Далее к системе подключаются зависимые модули дополнительных API, которые реализуют пользовательские функции - комментарии, лента rss, динамическия конфигурация и кеш. Эти API используют уже подключенные ранее незавыисимые объекты, и строят на них более сложный функционал, такой как обработка комментариев.
Получается, что ядро формируется динамически на лету. Это позволяет легко и быстро отключать ненужные модули, для увеичения быстродействия системы или для уменьшения её объёма. Способ формирования ядра на лету, применённый в AlterCMS Core I позволяет собирать ядро динамически без потерб времени. С другой стороны, в MicroCore этот процесс выродился в статические подключение модулей в одном файле. Это, конечно, уменьшает динамичность, но в случае с лёгкими системами MicroCore она и не требуется.
Пользовательские модули подгружаются на последнем этапе. Система загружает список всех активных модулей, и по очереди "опрашивает" их - подключает файл preload каждого из модулей. В задачи preload-файла входит подключение языка, задание констант, формирование элементов навигации модуля. Кроме этого, на этом этапе каждый из модулей проверяет, не его ли пытается использовать в данный момент посетитель сайта. Если это так, то устанавливаются соответствующие переменные состояния системы.

После опроса модулей система отрабатывает критические ситуации. К ним относятся переходы на модули ядра (показ карты сайта, последние комментарии) или выбор модуля по умолчанию (если не установлены переменные состояния модулей). В случае, если критические ситуации отработаны успешно, система подключает index-файл исполняемого модуля, и всё управление передаётся ему.
Как правило, любой модуль осуществляет следующие действия:
1. Загрузка выводимой информации (подразделы, записи)
2. Формирование переменных строки нафигации mainline и заголовка title
3. Подключение файла заголовка страницы page header и инициализация вывода
4. Вывод информации пользователю
5. Подключение файла окончания страницы page footer и закрытие сеанса

Этот функционал может меняться в зависимости от задач конкретного модуля, в некоторых случаях могут даже остутствовать 2,3 и 5 пункты.
В случае с MicroCore всегда подгружается только один модуль, который отвечает за весь небольшой функционал системы, но каждый его раздел выполняет те же самые задачи, что и крупные модули Core.

На правах рекламы: