16 марта 2010, 17:42 (5395 дней назад, №8786)Про MVC фреймворки для Flex, а также про AMF и PDO
Понадобилось тут написать систему для редактирования некоторых данных (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.