Создаем собственный фреймворк

Среди начинающих разработчиков постоянно вспыхивают споры что лучше технология X или Y. Среди современных php фремворков обычно сравнивают yii и laravel. Как мне кажется, вопрос не корректен, ведь у каждого человека свои пристрастия и каждому ближе какое-то свое решение. Кроме того эти два фреймворка построены на немного разных принципах.

Yii построен на принципе монолитности: фрейворк предлагает в себе все необходимые решения, для того чтобы сделать минимальный сайт. Laravel построен по принципу сборной конструкции: каждый его компонент может жить в отдельности. Структура yii потенциально обеспечивает большее быстродействие, так как позволяет произвести оптимизацию кода и ресурсов. Структура Laravel дает больше гибкости. Если конципция yii кажется более простой и понятной, то концепция Laravel нуждается в пояснении. Мне кажется достаточно хорошей иллюстрацией будет история, которая оформилась за последние несколько недель.

Несколько недель назад мне пришлось проводить рефакторинг существующего кода. Код отвечал за работу апи сервера на бэкэнд сервере. Код был написан в процедурном стиле и представлял из себя идин большой switch-case. Обращение к базе данных тоже были в процедурном стиле. Все настройки были вынесены в глобальные переменные.

Для уменьшения сложности работы в первую очередь я изменил работу с БД. Я переписал все обращения к БД на pdo. Внедрив pdo, я выпустил на свет все проблемы, ошибки и неточности, которые до этого игнорировались и скрывались, и сделал код более стабильным.

Внедрение pdo увеличило количество глобальных переменных. Для того чтобы разобраться с ними, я поставил pimple - и перенес в него все глобальные переменные и настройки pdo. Теперь вместо 15 глобальных переменных стала одна.

После этого я решил уменьшить размер файла. Я разбил файл на два - в одном оставил switch-case. В другой перенес методы которые вызывались из этого switch. Это позволило сделать более приятной работу как с первым файлом так и со вторым. Кроме того это позволило немного уменьшить дублироваие код, за счет его переиспользования.

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

Так как файлов стало много, то в начале файлов появилось много конструкций include. Чтобы избавиться от них я решил использовать волшебный автозагрузчик композера. Композер смог быстро решить проблему.

Через какое то время мне понадобилось описать достаточно сложную логику работы с записями таблицы. Так как я уже понимал что я создаю свой фреймворк - я просто подключил Illuminate и создал модель на его основе.

Таким образом мой фреймворк окончательно оформился. В нем уже оформился контейнер для храненния всего, система роутинга, начали оформляться компоненты и система контроллеров. Если подумать, то я на одном приложении прошел путь от php4 до php5. Скорее всего использование монолитного фреймворка, такого как yii, дало бы более быстрое приложение при разработке с нуля, зато использование компонентной модели, подобной laravel, позволяет постепенно наращивать функционал.

Posted in Laravel, Yii, Проектирование программ on Jun 27, 2015

comments powered by Disqus