С праздником, коллеги! А у нас тут подарок назрел. Ну или кара небесная. Пока не понятно. Если вкратце, то мы напряглись, собрались, сконцентрировались, и готовы представить на суд общественности новую версию нашего фреймворка Limb. Ну, правда, не совсем версию, а второй релиз-кандидат — 2010.1 RC2.
Для тех, кто не в курсе, Limb это PHP-фреймворк, ориентированный на быструю и гибкую разработку. Наши приоритеты/ гибкость — качество кода — скорость разработки.
Limb одним списком:
Тем, кому не терпится порвать нас в клочья критикой и баг-репортами, прошу забрать код, вооружиться документацией и репортить, репортить, репортить.
А теперь подробнее о том, что у нас есть.
Пакет содержит глобальные функции для отложенной загрузки кода, работы с переменными окружения, пакетами. Помимо этого, он содержит базовые контейнеры данных (сэты, объекты, коллекции). И всякие утилитарные штуки: lmbArrayHelper для жонглирования массивами и коллекциями, lmbHandle, для любителей отложить что-то на потом и lmbDelegate, для тех кто не хочет делать сам, и предпочитает делегировать.
Toolkit – реализация паттерна Dynamic Service Locator, одного из методов Dependency injection. Суть в том, что есть некий легкодоступный объект, который является общей точкой для доступа ко всем популярным объектам (сервисам). Он является своеобразным клеем, который удерживает код от сползания в бездну статических зависимостей.
ActiveRecord, как несложно догадаться из названия, является одной из возможных реализаций ORM(Object-Relation Mapping). Первоначальная идея пакета взята из фреймворка Ruby-On-Rails. RoR в данном случае выступали в качестве функционального ориентира. И вот, что он умеет/
Не любите ORM? А вот вам ДБАЛ! DBAL(DataBase Abstraction Layer) предоставляет объектно-ориентированный доступ к базе данных, абстрагируясь от деталей конкретной реализации. Архитектура пакета DBAL вполне стандартна:
Limb следует парадигме MVC, как средству логичного разбиения кода на относительно независимые куски. Пакет View представляет одноименный слой MVC, и представляет из себя абстракцию от конкретного механизма шаблонизации. В данный момент основным шаблонизатором в limb является Macro, пришедший на смену WACT’у. Помимо них View поддерживает Blitz, JSON и нативный PHP.
Macro – это своего рода syntactic sugar для нативного РНР. Мы не пошли по пути хэлперов, а остались верны тегам и фильтрам. Кратко о Macro:
Я уже говорил о MVC? А вот и вторая его часть — WebApp. Пакет предоставляет классы для реализации только Controller составляющей. Выбор средства для реализации модели и отображения все равно лежит на конечном разработчике приложения. С другой стороны пакет реализован таким образом чтобы максимально упростить работу с приложениями, где в качестве модели будут выбраны “родные” Limb пакеты DBAL и ActiveRecord, а в качестве средства отображения – пакет View. В общем двояко, а местами и трояко.
Хочите админку и средства быстрого ее расширения? Их есть у меня — пакет CMS! Аутентификация, идентификация и прочие -ции, средства для быстрого построения CRUD-интерфейсов, фильтров, форм.
Пакет для организации и запуска SimpleTest-тестов для приложений, с большим количеством тестов и сложными многоярусными фикстурами. Пакет не имеет зависимостей от других пакетов, поэтому может быть аккуратно выпилен из Limb'а лобзиком, для использования отдельно.
Список со всеми 37(ужас!) пакетами. Вот самые важные/
Ну и небольшое видео того, рождался и рос Limb.
ЗЫ: Прошу сильно не пинать за ошибки, ибо в предверии этого светлого момента не спал уже 30 часов. Напишите мне в личку, и мой портативный клон Человека-Грызлова все тихо поправит.
ЗЫЫ: Еще раз с праздником! Простого кода, легкой отладки и побольше счастливых озарений, делающих нашу работу любимой!
Для тех, кто не в курсе, Limb это PHP-фреймворк, ориентированный на быструю и гибкую разработку. Наши приоритеты/ гибкость — качество кода — скорость разработки.
Limb одним списком:
- Парадигма — MVC
- DependencyInjection — Toolkit(императивное инстанцирование)
- Организация приложения — InterceptingFilter
- ORM — ActiveRecord
- DBAL — собственная реализация (MySQL 4.1+, SQLite, Oracle (OCI8), PostgreSQL 8.2+, Linter)
- Шаблонизатор — Macro, WACT, Blitz и т.д.
- Тестирование — на основе SimpleTest
Тем, кому не терпится порвать нас в клочья критикой и баг-репортами, прошу забрать код, вооружиться документацией и репортить, репортить, репортить.
А теперь подробнее о том, что у нас есть.
Пакеты Limb
Core — ядреный
Пакет содержит глобальные функции для отложенной загрузки кода, работы с переменными окружения, пакетами. Помимо этого, он содержит базовые контейнеры данных (сэты, объекты, коллекции). И всякие утилитарные штуки: lmbArrayHelper для жонглирования массивами и коллекциями, lmbHandle, для любителей отложить что-то на потом и lmbDelegate, для тех кто не хочет делать сам, и предпочитает делегировать.
Toolkit — гибкость дающий
Toolkit – реализация паттерна Dynamic Service Locator, одного из методов Dependency injection. Суть в том, что есть некий легкодоступный объект, который является общей точкой для доступа ко всем популярным объектам (сервисам). Он является своеобразным клеем, который удерживает код от сползания в бездну статических зависимостей.
ActiveRecord — рутины лишающий
ActiveRecord, как несложно догадаться из названия, является одной из возможных реализаций ORM(Object-Relation Mapping). Первоначальная идея пакета взята из фреймворка Ruby-On-Rails. RoR в данном случае выступали в качестве функционального ориентира. И вот, что он умеет/
- автоматически определять наименования и типы полей таблицы
- валидировать модели
- отношения один-к-одному, один-ко-многим и много-ко-многим
- ValueObjects
- наследование в рамках одной таблицы (Single Table Inheritance)
- “отложенную загрузку” (LazyAttributes) для атрибутов
- “жадные” операции (Eager fetching)
- объектные и глобальные события
- пользовательские коллекции
- связи c параметрами
DBAL — данными манипулирующий
Не любите ORM? А вот вам ДБАЛ! DBAL(DataBase Abstraction Layer) предоставляет объектно-ориентированный доступ к базе данных, абстрагируясь от деталей конкретной реализации. Архитектура пакета DBAL вполне стандартна:
- Driver – базовые классы, которые абстрагируют доступ к базе данных
- Query — группа классов, позволяющих тем или иным образом инкапсулировать SQL запросы разного назначения (SELECT, INSERT, UPDATE, DELETE)
- Criteria — группа классов, позволяющих строить условия для SQL запросов в объектной форме
View, WACT и Macro — на экран выдающие
Limb следует парадигме MVC, как средству логичного разбиения кода на относительно независимые куски. Пакет View представляет одноименный слой MVC, и представляет из себя абстракцию от конкретного механизма шаблонизации. В данный момент основным шаблонизатором в limb является Macro, пришедший на смену WACT’у. Помимо них View поддерживает Blitz, JSON и нативный PHP.
Macro – это своего рода syntactic sugar для нативного РНР. Мы не пошли по пути хэлперов, а остались верны тегам и фильтрам. Кратко о Macro:
- промежуточная компиляция в PHP-код
- две области видимости переменных/ глобальная и локальная (на уровне шаблона)
- механизм фильтров
- шаблоны комбинируются через include (включение дочернего шаблона), wrap (включение в родительский шаблон) и template+apply (применение шаблона)
- поддерживается концепция слотов
- готовые теги для работы со списками, деревьями, пейджингом, формами и их полями, ссылками и интернационализацией
- готовые фильтры для различного форматирования строк, чисел, дат и специальных форматов
- расширяем через собственные теги и фильтры
WebApp и CMS — всю эту радость объединяющие
Я уже говорил о MVC? А вот и вторая его часть — WebApp. Пакет предоставляет классы для реализации только Controller составляющей. Выбор средства для реализации модели и отображения все равно лежит на конечном разработчике приложения. С другой стороны пакет реализован таким образом чтобы максимально упростить работу с приложениями, где в качестве модели будут выбраны “родные” Limb пакеты DBAL и ActiveRecord, а в качестве средства отображения – пакет View. В общем двояко, а местами и трояко.
Хочите админку и средства быстрого ее расширения? Их есть у меня — пакет CMS! Аутентификация, идентификация и прочие -ции, средства для быстрого построения CRUD-интерфейсов, фильтров, форм.
TestsRunner — за качеством бдящий
Пакет для организации и запуска SimpleTest-тестов для приложений, с большим количеством тестов и сложными многоярусными фикстурами. Пакет не имеет зависимостей от других пакетов, поэтому может быть аккуратно выпилен из Limb'а лобзиком, для использования отдельно.
И прочие
Список со всеми 37(ужас!) пакетами. Вот самые важные/
- CACHE(2) — абстракции от хранилища кэша(файлы, APC, БД, память, сессии) и средства для работы с кэшами(защита от dog-pile, тэггирование и логирование)
- CONSTRUCTOR — консольный генератор кода (модели, контроллеры, админка)
- FILTER_CHAIN — имплементация паттерна Intercepring Filter, основы Limb-приложений
- MIGRATE — синхронизация схемы базы между разработчиками и привязывание ее к коду
- TASKMAN — у нас и Ant свой, да
Выводы
1. Зачем ты это все написал, если это не stable?Собственно и написал, чтобы это стало stable. Чем больше приложений, тем стабильнее код. Некоторые новые пакеты(migrate, profile, constructor) мне кажутся сырыми, не смотря на то, что используются в живых проектах. Ну и «новую кровь» в разработку привлечь хотелось.
2. Где взять это?Как я уже говорил, репозиторий расположен на GitHub, и там же можно скачать код версии 2010.1 RC2.
3. С какой стороны его кусать?
- Страничка вступающего в нашу секту
- Как создать простейшее CRUD-приложение
- Как создать электронный магазин
- Документация
- FAQ
- Форум
- Code Bits
- Roadmap
Ну и небольшое видео того, рождался и рос Limb.
ЗЫ: Прошу сильно не пинать за ошибки, ибо в предверии этого светлого момента не спал уже 30 часов. Напишите мне в личку, и мой портативный клон Человека-Грызлова все тихо поправит.
ЗЫЫ: Еще раз с праздником! Простого кода, легкой отладки и побольше счастливых озарений, делающих нашу работу любимой!