Limb3 — это свободный PHP5 фреймворк, приспособленный к быстрой разработке приложений, без существенного усложнения поддержки получившихся продуктов. Limb3 не является монолитным фреймворком, что позволяет использовать его в качестве библиотеки компонентов. Limb3 состоит из набора относительно независимых пакетов, каждый из которых должен решать свою задачу. Каждый пакет более или менее независим от других, и для разрешения межпакетных зависимостей используется схема, принятая в PEAR.

История и идеологияПравить

Первый официальный релиз Limb2 состоялся весной 2004 года, однако работа велась около года и до этого. Два года использования выявили плюсы и недостатки Limb2, и в конце 2005 года началось разделение кодовой базы на более узкоспециализированные пакеты. Полностью отказаться от Limb2 было на тот момент невозможно, поэтому было решено создать полностью отдельную ветку Limb3. При разработке предъявляются высокие требования к качеству кода. Около 90% кода Limb3 покрыто модульными тестами. В разработке используются Agile-методики: TDD, парное программирование, ContinuousIntegration и проч. Limb3 не накладывает на разработчиков никаких ограничений в вопросах интеграции с другими фреймворками.

Основные пакеты limb3 и их функцииПравить

coreПравить

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

  • подключение классов и поддержка отложенной загрузки кода (autoload)
  • отложенная инициализация объектов
  • контейнеры данных (как списковые, так и несписковые контейнеры данных)
  • объектные формы call_back вызовов
  • различные утилитарные классы для сериализации, создания декораторов на лету, упрощению работы с массивами

toolkitПравить

Пакет является реализацией паттерна Dynamic Service Locator. Его суть состоит в том, что есть некий легко доступный объект, который является общим местом для доступа ко всем популярным объектам (сервисам) и в том, что возможности этого объекта можно легко расширять.

macroПравить

Пакет реализует относительно простой компилирующий шаблонизатор, со следующими особенностями:

  • никаких ограничений на РНР-вставки
  • включение и враппинг шаблонов (с поддержкой зон)
  • облегчённая поддержка контекстов данных (локальные и глобальные данные)
  • отсутствие runtime дерева компонентов
  • модификация данных производится с помощью фильтров

dbal (Data Base Abstraction Layer)Править

Пакет предоставляет объектно-ориентированный доступ к базе данных, абстрагируясь от деталей конкретной реализации. В данный момент поддерживаются следующие базы данных: MySQL (MySQLi), PostgreSQL, SQLite и Oracle.

active_recordПравить

Реализация паттерна ActiveRecord, отчасти схожего с реализацией подобного паттерна в Ruby on Rails.

  • автоматическое определение наименований и типов полей таблицы
  • поддержка отношений один-к-одному, один-ко-многим и много-ко-многим
  • поддержка ValueObjects
  • поддержка наследования в рамках одной таблицы (Single Table Inheritance)
  • поддержка «отложенной загрузки» (LazyLoading) для коллекций
  • тесная интеграция с шаблонизатором

web_appПравить

Пакет позволяет строить веб-приложения, применяя паттерн MVC. Сам пакет предоставляет классы для реализации только Controller-составляющей. Выбор средства для реализации модели и отображения всё равно лежит на конечном разработчике приложения, хотя WEB_APP реализован таким образом, чтобы максимально упростить работу с приложениями, где в качестве модели будут выбраны «родные» для Limb3 пакеты DBAL и ACTIVE_RECORD, а в качестве отображения — пакет VIEW.

tests_runnerПравить

Пакет для организации и запуска SimpleTest тестов для приложений, которые содержат большие тестовые наборы. В поставку с пакетом входят классы, которые позволяют выполнять тесты в cli или web-режиме.

Полный список пакетов limb3, с описаниемПравить

Название Зависимости Назначение
ACL CORE Пакет реализует функционал ACL
ACTIVE_RECORD CORE, DBAL, VALIDATION Реализация паттерна ActiveRecord
CACHE CORE Набор классов, предназначенных для обобщения различных техник кеширования
CALENDAR JavaScript календарь
CLI CORE Различные средства, упрощающие разработку CLI интерфейса
CONFIG CORE Различные средства для работы с конфигурационными файлами
CORE Пакет, отвечающий за поддержку подключения других пакетов. Содержит базовые классы для работы с различными контейнерами данных и коллекциями. Практически все остальные пакеты зависят от него.
DATETIME CORE Пакет для работы с временем, датой, временными периодами
DBAL CORE, TOOLKIT, NET Пакет, абстрагирующий работу с БД
FS CORE Различные средства для работы с файловой системой: базовые файловые операции, нахождения файлов по псевдонимам и др.
FILTER_CHAIN CORE Имплементация паттерна Intercepring Filter.
I18N CORE, TOOLKIT, VALIDATION, CONFIG, UTIL, CLI, DATETIME Пакет, упрощающий процесс интернационализации приложений
IMAGEKIT CORE Примитивные средства, абстрагирующие работу с графическими библиотеками
JS Пакет, содержащий JavaScript-средства для модульной загрузки кода и набор базовых JavaScript классов
MACRO CORE, FS Шаблонизатор MACRO
MAIL Обертка PHPMailer библиотеки, предназначенной для отсылки почты
NET CORE, UTIL Набор классов в для работы с сетевыми протоколами (в основном с HTTP)
SEARCH CORE, DBAL, I18N Средства для организации индексирования и поиска (пакет длительное время не находится в разработке)
SESSION CORE, DBAL Средства для работы с PHP-сессиями и абстрагирования источника хранения сессионных данных(пока только БД)
TESTS_RUNNER Тестовая оболочка, основанная на SimpleTest, позволяющая организовать группы тестов, используя расположение тестов в файловой системе
TOOLKIT CORE Средства для организации Dependency Injection (реализация Dynamic Service Locator)
TREE CORE, TOOLKIT, DBAL, VALIDATION, CACHE Пакет для организации хранения деревьев в БД
VALIDATION CORE Пакет, предоставляющий различные средства валидации данных
VIEW WACT[опционально], MACRO[опционально] Пакет, содержащий средства для работы с представлением
WACT Шаблонизатор WACT
WEB_APP CORE, CONFIG, FILE_SCHEMA, TOOLKIT, I18N, WACT, CLI, CACHE, DBAL, VALIDATION, ACTIVE_RECORD, SESSION, MAIL, DATETIME, FILTER_CHAIN, NET Набор различных средств для построения web-ориентированных приложений
WYSIWYG CORE, WEB_APP, WACT (MACRO) Расширенный текстовый редактор для ввода гипертекста

СсылкиПравить

Исходный текст этой статьи был опубликован в русской Википедии , но был там удален. Так же, как и в этом проекте, тексты, размещённые в Википедии, доступны на условиях лицензии GNU FDL.