?

Log in

No account? Create an account

Previous Entry | Next Entry

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

Почитав, что пишет народ и посмотрев на исходники двух наиболее известных MVC фреймворков - PureMVC  и Cairngorm,  решил их не использовать, посчитав что сложность не соответствует задаче.
Стал смотреть другие фреймворки. Их много, например: FlashMVC, Riawave, Mate, EasyMVC, Dawn, RobotLegs, Vyana.

Я остановился на EasyMVC by Tom Bray (существует еще другой EasyMVC, так что автор важен). EasyMVC [ 1, 2, 3, 4, 5] - даже не совсем фреймворк - это скорее простой и понятный пример, который легко модифицировать под нужную задачу. Единственное что там не хватает, на мой взгляд, - это красивой реализации Commands (всё делается в Controller'e).

Со стороны сервера, EasyMVC подрузамевает использование AMFPHP (т.е. обмен данными происходит в адобовском бинарном формате AMF).
AMFPHP  - уже довольно старая разработка, но несмотря на это интенсивно используется. Автор её забросил (он теперь работает над ZendAMF , который подрузамевается использовать в связке с Zend ) но подхватил другой человек. Короче говоря, AMFPHP мне понравился.
Существует некоторая путаница с версиями AMFPHP. Последняя версия - 0.9.2. В феврале 2010-го новый автор написал, что работает над 2.0. В версии 0.9.2. есть ряд отличий от 0.9. В частности, по вопросу аутентификации советую сразу погуглить слово beforeFilter.

Помимо AMFPHP и ZendAMF можно ещё посмотреть в сторону SabreAMF  и WebORB. Да, кому интересно - если серверную часть писать для Google App Engine на Python'e, то существует как минимум PyAMF (в связке с Flex приложением работает, я лично пробовал).

Ещё, к слову о правильности, на серверной стороне, для работы с разными БД из PHP, понравился PDO.
Выглядит это так (пример использования prepared statements):

try
{
    $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

    $st = $this->db->prepare("
        DELETE FROM ip_base
        WHERE id = :id
        ");

    $res = $st->execute( array(':id' => (int)$vo[id]) );

}//try
catch(PDOException $e)
{
    return $e->getMessage();
}//catch

Вот здесь еще примеры про PDO.