суббота, 28 августа 2010 г.

Поддержка PHP 5.3 Namespaces для Zend Framework 1.10

Введение

Этот пост посвящен продолжению разработки CMF на базе Zend Framework 1.10.x. 

Так как проект совсем на начальной стадии, частенько приходится переносить файлы внутри проекта по разным каталогам, т.к. структура еще не устоявшаяся. И вот после очередного переноса, опять пришлось лазить по коду и переименовывать кучу классов, что бы они соответствовали своему новому расположению. После чего появилось сильное желание перевести свой код на нэймспейсы PHP 5.3. Во-первых, родные нэймспейсы позволяют избавиться от полукилометровых названий классов; во-вторых, при перемещении класса, достаточно исправить только заголовок объявления нэймспейса, ну и в третьих, проект изначально задумывается для PHP версии 5.3 и выше, так что заботиться о том что нэймспейсы не будут доступны  - глупо.

суббота, 21 августа 2010 г.

Перевод документации для Mockery

Mockery - это объектно-ориентированный PHP фреймворк для mock-объектов, написанный Pádraic Brady одним из участников Zend Framework Community Review Team (CR Team). 
 
Mockery сделан как независимый фреймворк и поэтому совместим с любым фреймворком для модульного тестирования (PHPUnit, SimpleTest...).

Вот небольшой список характеристик и возможностей Mockery:
  • Полная поддержка Mock-объектов и Заглушек (Stub)
  • Легкий, fluent API
  • Гибкая настройка mock и stub
  • Запись взаимодействия объектов
  • Синтаксис приближенный к естественному языку
  • Поддержка обобщений (untyped)
  • Простые частичные mock-объекты на основе реальных объектов
  • Поддержка порядка вызова подменяемых методов как в пределах локальных, так и в пределах глобальной области
  • Встроенная очередь для возвращаемых значений, при повторных вызовах
  • Поддержка ожиданий по умолчанию
  • Поддержка замены ожиданий и их наложения
  • и т.д.
Более подробно вы можите ознакомиться с фреймворком Mockery, а так же предпосылками к его появлению в блоге Pádraic Brady.
 
Оригинальная документация доступна здесь. Так же я с удовольствием перевел ее на русский, для популяризации как этого фреймворка (а он мне  действительно понравился), так и самой методологии Test Driven Development.

среда, 18 августа 2010 г.

Памятка по исключениям php 5.3+

Начиная с PHP версии 5.3.0+ прикладному разработчику по умолчанию доступна библиотека SPL (Standart PHP Library), которую теперь даже нельзя отключить опциями компиляции. В связи с этим, можно безопасно пользоваться решениями предоставляемыми этим расширением. В этой заметке я хотел бы осветить набор стандартных исключений, предоставляемых SPL.

четверг, 12 августа 2010 г.

Кеш-драйвер для Doctrine на основе Zend_Cache

Продолжаем серию статей посвященную интеграции Doctrine 2.0 и Zend Framework 1.10. В этой статье мы добавим поддержку кеш-драйвера для Doctrine на основе Zend_Cache.
Введение

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

По умолчанию, в доктрине поддерживаются следующие драйверы:
  • Doctrine\Common\Cache\ApcCache
  • Doctrine\Common\Cache\MemcacheCache
  • Doctrine\Common\Cache\XcacheCache
  • Doctrine\Common\Cache\ArrayCache
Собственно для "продакшина" пригодны только первые три. Последний предназначен только для разработки и кеширует данные только в рамках одного запроса. Проблема заключается в том, что все эти три драйвера требуют дополнительного ПО, установленного на сервере.

В ZF есть отличный компонент для работы с кешем - Zend_Cache. Стоит отметить, что Zend_Cache кроме поддержки APC, XCache, Memcache умеет работать с простыми файлами, SQLite и другими бэкэндами. Напишем адаптер, позволяющий Doctrine работать c Zend_Cache.

среда, 11 августа 2010 г.

Интеграция Zend Framework 1.10 и Doctrine 2.0

В этой статье я продолжу разработку некого каркаса приложения на Zend Framework'e, придерживаясь лучших практик из мира объектно-ориентированного проектирования. Мы шаг за шагом будем интегрировать Doctrine 2, а поможет нам Dependency Injection контейнер, который мы успешно интегрировали в предыдущей статье.

суббота, 7 августа 2010 г.

Интеграция Symfony DI-контейнера в Zend Framework 1.10.x

Возникло у меня желание, начать новый проект на Zend Framework'е с применением лучших практик из мира объектно-ориентированной разработки ПО и современных тенденций PHP-индустрии. Целью всего этого является конечно же обучение и закрепление изученного материала.

Первым делом, решил интегрировать Dependency Injection контейнер в Zend Framework.  Ибо без этого трудно добиться "хорошего" дизайна, кроме того я не смогу эффективно тестировать свои объекты и классы. Что бы лучше понять что из себя представляют DI-контейнеры, а так же паттерн Dependency Injection советую прочитать статью Мартина Фаулера, перевод которой доступен здесь.

В этой статье я шаг за шагом интегрирую Dependency Injection контейнер от Symfony в Zend Framework версии 1.10.x. При этом я постараюсь действовать согласно методологии TDD (Test Driven Development), а именно практики Test First - написание тестов, до реализации.