Сталкиваясь с множеством объектных моделей, которые разработчики воплощают в своих РНР фреймворках, лично я столкнулся с недостаточной гибкостью моделей и откровенно лишним кодом, который в некоторых, частых, случаях не выполняет своей работы, а просто висит…
Посему, предлагаю на Ваш суд собственную модель реализации веб-приложений реализованных на языке РНР.
Надеюсь, когда-то данная идея станет реальным фреймворком.
Предисловие
В наше время что главное для любого приложения, а особенно веб? Устойчивость, маштабируемость, быстродействие. И разработчики в меру своих сил и возможностей стараются воплотить в жизнь свои представления о идеальном приложении. Все началось с того, что у меня возникла очередная идея безусловно полезного и относительно незаменимого приложения на РНР. Приступая к его реализации я стал думать о том, чтобы построить данное приложение на базе фреймворка, коих в сети навалом. Проанализировав наиболее популярные фреймворки я пришел к выводу, что 95% данного «софта» представляют собой заготовку CMS без предустановленного дизайна. По крайней мере мне так показалось.
Но это было не то, что я хотел увидеть в качестве фреймоврка. К слову сказать, пользовательская сторона проекта была сведена к минимуму, основной упор делался на серверные операции. Мне не нужен был функционал, который могла мне дать обычная CMS-ка. Мне нужна была «библиотека отлаженного кода» который я могу бы, покурив мануала, спокойно использовать вперемешку с собственным кодом.
Результатом размышлений по данному поводу есть этот топик.
Основная идея
Библиотека классов с двумя режимами использования.
- В качестве встраиваемых, независимых друг от друга библиотек методов, с набором необходимых свойств;
- Как целостная вычислительная система, которая адаптируется под нужды пользователя.
Реализация
Основная идея, вокруг которой вращается вся реализация — это фреймворк, который построенный по принципу
ОС Linux и имеет подобную структуру у схему работы.
Весь фреймворк разбит на две большие части:
ядро, минимум кода, который нужен для функционирования, и есть целостным модулем, но в то же время составлено из узконаправленных библиотек, и
дополнительные модули, которые можно «доустановить» в систему позже, их задача — расширять возможности системы.
Но, разберем все по порядку.
Итак ядро. Оно представляет собой набор классов, в которых прописана базовая функциональность: работа с ФС, базами данных, сессиями, графикой, логирование, и буферизация. Его составные части — классы, которые написаны таким образом, что могут функционировать независимо друг от друга. Вы спросите: «А как же общая конфигурация?». Решение данной проблемы — так называемый
клас concentrator.
Немного о нем. Вот думаю большинство из тех, кто сейчас читает этот топик знает принцип работы ядра Linux. При запуске системы в первую очередь запускается процесс
init, который потом, с помощью форкинга дает начало всем остальным процессам. То бишь все процессы пользователя являются дочерними по отношению к init. Этот же принцип положен в основу работы
класса concentrator. «Внешне» все классы ядра, по сути, ничего не объединяет. Это позволяет встраивать их в любое месть любого кода, независимо друг от друга. А если разработчик захочет собрать их воедино, то сможет сделать это с помощью
класса concentrator. Он выполняет функции «колпака», под которым могут взаимодействовать все необходимые разработчику классы и отдельные методы. Класс имеет собственное API, что позволяет сторонним разработчикам дописывать или редактировать уже существующее классы под собственные нужды.
В самом начале я говорил о большом количестве «ненужного» кода, который не работает. Так вот,
клас concentrator подключает не все подряд методы, из вызванных классов. При первом запуске собранной из «кирпичиков» системы, создаются дочерние классы, которые наследую только те функции родительских, которые действительно нужны для работы. При необходимости расширения функционала, подобную процедуру можно будет вызвать повторно.
Система
дополнительных модулей чем-то схожа, опять же, с ОС Linux. Когда разработчик захочет доустановить модуль, то тот (модуль) будет работать на основе тех методов, что уже прописаны в классах ядра. То есть используется система зависимостей. Линуксоиды меня поймут. Если хочешь установить модуль, установи вместе с ним библиотеку для ядра, которая будет реализовывать методы, необходимые для функционирования модуля. А если у тебя уже есть данный модуль, то все отлично. Таким образом достигается «уникальность» кода внутри системы, не будет функций в разных модулях, которые будут выполнять одни и те же операции.
Опять же, все дополнительные модули работают под колпаком
класа concentrator.
Выводы
А выводы я предлагаю сделать
хабрасообществу. Вам, друзья виднее. Как думаете, имеет ли будущее подобная модель работы веб-приложения?