23.09 2010

Установка MongoDB на Ubuntu 10.04 и связывание с PHP

MongoDB - это документная база данных, написанная на c++. Для обмена данными с клиентом использует JSON, а хранит в двоичном формате BSON. По методу обмена данными эта база данных относится к NoSQL, т.е. использует не классический метод для взаимодействия реляционных баз данных и клиента (без SQL).

Для установки в Ubuntu достаточно прописать в консоле:

sudo apt-get install mongo

По окончании установки, для проверки работоспособности, выполните в консоле:

mongo

Вы должны увидеть примерно следующее приветствие:

MongoDB shell version: 1.2.2
type "exit" to exit
type "help" for help
Читать дальше
09.09 2010

Нагрузочное тестирование на скорую руку

Если у вас в команде нет тестировщиков, или вы сами тестировщик и очень ленивы, чтобы организовать нормальные тесты через jMeter или ab, но протестировать под нагрузкой свой любимый проект вам очень хочется, то это статья для вас =).

Подготовка

Все производимые далее действия идут с предположением, что у вас стоит один из дистрибутивов Linux Тестирование мы будем проводить с помощью программы siege. В ubuntu ее установить можно командой:

sudo apt-get install siege

Если у вас не ubuntu, попробуйте установить из репозитория вашего дистрибутива с помощью штатных программ (yum, emerge), или скачать отсюда

Siege обладает достаточной функциональностью, чтобы определить максимальную пропускную способность вашего сервера.

Читать дальше
29.08 2010

Паттерн проектирования Builder (Строитель) на PHP

Builder

Перед прочтением ознакомьтесь с введением в паттерны проектирования на PHP, в котором описаны принятые соглашения и понятия. Данная статья дополняется с некоторой периодичностью, так что если вы ее читали ранее, не факт что данные не изменились.

Builder (Строитель) относится к классу порождающих паттернов. Он используется для отделения процесса конструирования сложного объекта от его представления, так что в результате одного и того же конструирования могут получаться различные объекты.

Читать дальше
27.08 2010

Введение в Traits

Traits - это механизм повторного использования кода. Был разработан как альтернатива подмешиванию (mixin) и, в некотором роде, множественному наследованию, так как позволяет разработчику более свободно повторно использовать методы объявленные в иной иерархии классов. Семантика комбинирования traits и классов специально разработана для избежания типичных проблем связанных с множественным наследованием и технологией mixin. На момент написания статьи, данная технология находиться в trunk и будет включена в новые сборки dev версии PHP 6 (также возможно и в 5.3.x)

Пример использования

trait Speaker {
    public function sayHello() {
        echo 'Hello World!';
    }
}

class Base {
    use Speaker;
}

$test = new Base();
$test -> sayHello();
Читать дальше
26.08 2010

Паттерн проектирования Prototype (Прототип) на PHP

Prototype

Перед прочтением ознакомьтесь с введением в паттерны проектирования на PHP, в котором описаны принятые соглашения и понятия. Данная статья дополняется с некоторой периодичностью, так что если вы ее читали ранее, не факт что данные не изменились.

Prototype (Прототип) относиться к классу порождающих паттернов. Он используется для задания вида создаваемых объектов на основе объекта прототипа, от которого происходит передача внутреннего состояния. Он сродни фабричному методу, позволяет избавиться от жесткой привязки к классам, и, как следствие, вязкости кода.

Читать дальше
20.08 2010

Отключение кэширования запросов в MySQL

Когда перед вами встает задача оптимизации sql запросов, важно измерять "чистое" время запроса, чтобы определить прирост или регресс. Классическим способом заставить MySQL игнорировать кэш является ключевое слово SQLNOCACHE.

SELECT SQL_NO_CACHE * FROM `table` t LEFT JOIN ...

Если же вам нужно оптимизировать пачку запросов, это решение может быть не удобным. В таком случае можно отключить кэширование полностью, выполнив запрос:

SET GLOBAL query_cache_size=0;
-- заново включить можно перезапустив MySQL или командой
SET GLOBAL query_cache_size=1024*1024*32;

Я думаю не стоит говорить, что использование второго способа на продакшен сервере чревато проблемами

Читать дальше
16.08 2010

Паттерн проектирования Singleton (Одиночка) на PHP

Singleton

Перед прочтением ознакомьтесь с введением в паттерны проектирования на PHP, в котором описаны принятые соглашения и понятия. Данная статья дополняется с некоторой периодичностью, так что если вы ее читали ранее, не факт что данные не изменились.

Singleton (Синглтон, одиночка) относиться к классу порождающих паттернов. Он используется для создания всего одного экземпляра класса, и гарантирует, что во время работы программы не появиться второй. Например в схеме MVC, зачастую этот паттерн используется для порождения главного контроллера (фронтового)

Читать дальше
14.08 2010

Паттерн проектирования Factory Method (Фабричный метод) на PHP

Factory method

Перед прочтением ознакомьтесь с введением в паттерны проектирования на PHP, в котором описаны принятые соглашения и понятия. Данная статья дополняется с некоторой периодичностью, так что если вы ее читали ранее, не факт что данные не изменились.

Factory Method относиться к классу порождающих паттернов. Они используются для определения и поддержания отношений между объектами. Фабричные методы избавляют проектировщика от необходимости встраивать в код зависящие от приложения классы.

Читать дальше
08.08 2010

Паттерн проектирования Abstract Factory (Абстрактная фабрика) на PHP

Abstract factory

Перед прочтением ознакомьтесь с введением в паттерны проектирования на PHP, в котором описаны принятые соглашения и понятия. Данная статья дополняется с некоторой периодичностью, так что если вы ее читали ранее, не факт что данные не изменились.

AbstractFactory относиться к классу порождающих паттернов. Его основное назначение - предоставить интерфейс для создания семейства взаимосвязанных объектов, не специфицируя их классы.

Читать дальше
07.08 2010

Паттерны (шаблоны) проектирование в PHP. Введение.

logo

Паттерн проектирования (design pattern) - это общее типовое решение некоторой проблемы, многократно повторяемое в процессе проектирования архитектуры программного продукта. Они показывают отношения и взаимодействия между классами, позволяют сделать систему гибкой и легко изменяемой. За счет их правильного использования повышается коэффициент использования готовых решений.

Я буду постепенно описывать каждый паттерн и добавлять его в список на этой странице.

Я предполагаю, что читатель осведомлен о понятиях ООП и знает в чем разница между интерфейсом и абстрактным классом. Знает что такое полиморфизм, инкапсуляция и наследование. Если вы не уверены в своих силах, рекомендую к прочтению статью из википедии "Объектно-ориентированное программирование".

В процессе описания я буду использовать UML, для графического изображением классов и их отношений. На этот счет не стоит беспокоиться, даже если вы не сталкивались с ним раньше, его можно интуитивно понять.

Понятия

  • Здесь и далее в статьях я буду употреблять "паттерн" (pattern) вместо русского аналога "шаблон"
  • Инстанация (instanate) - процесс создания объекта определенного класса.
  • Код клиента - это код программиста, который будет работать с нашей частью программы по принципу черного ящика, т.е. только через публичный интерфейс

Список

Порождающие

Структурные

Паттерны поведения

Читать дальше