Framework Qcodo -- PHP на рельсах?

Bermuda

Новичок
Framework Qcodo -- PHP на рельсах?

Идея обращаться к записям в базе как к объектам хоть и не нова, но иногда очень удобна. Не хватает шаблонов, но как раз именно QForms и заменяют эту сущность, интересный взгляд на представление.

Пока не смог оценить все плюсы и минусы. Лично у меня ощущения очень противоречивые.

Кто знаком с сабжем? Интересно услышать отзывы.
 

@lexander

Новичок
Bermuda, можете сравнить Qcodo с ZendFramework и Limb?
Почему вы выбрали именно Qcodo?
 

Bermuda

Новичок
@lexander, если сравнивать Qcodo и ZendFramework, то Qcodo ближе к понятию фрэймворк, а ZendFramework я бы описал как "набор очень полезных библиотек".

Месяца три назад тестировал быстродействие нескольких фрэймворков. Дело в том, что я пишу свой фрэймворк и периодически встает вопрос -- стоит ли продолжать или будет выгоднее пересесть на самый продвинутый фрэймворк и вкладывать силы в его развитие, чем постоянно кого-то догонять. Посему тесты были очень субъективные. Тем не менее ZendFramework оказался медленнее Qcodo на 5-10%.

Собственно Qcodo я не выбирал, мне его посоветовал более опытный коллега. На Qcodo я сделал один проект, очень понравилось. А именно понравилась идеология фрэймворка -- модель данных основа основ и плясать будем от нее. Также понравилась прозрачность Qcodo, он не заставляет строго следовать его "технологии", и позволяет вообще его не использовать, тем не менее у меня возникало очень мало ситуаций когда бы я предпочел не использовать Qcodo. Интересная идея генератора кода который генерит базовые классы CRUD функционала на основе анализа модели данных. При изменении модели данных не приходится переписывать половину методов, достаточно перегенерировать базовые классы. Здесь же кроется и минус, накладываются жесткие ограничение на модель данных -- база данных должна быть 100% реляционной, хотя лично я это минусом не считаю.
Также очень понравилась концепция QForm (не путать с QuickForm). Идея в том, что все элементы на странице это объекты разных классов. Используя QForm почти возможно забыть об асинхронности веба. Сайт превращается в полноценное приложение, имеется в виду, что на события в браузере можно повесить какое-либо действие на сервере.
Еще одна замечательная вещь это включение/отключение AJAX в формах одной лишь строчкой. Я до сих пор толком не знаю как на самом деле реализуется AJAX, Qcodo снимает с разработчика эту ответственность. В том единственном проекте который я сделал на Qcodo я не написал ни одной строчки javascript-а.
Qcodo направлен на быструю разработку приложений. Когда приложение написано, всегда остается возможность оптимизации, например later/early binding.
Еще один минус Qcodo это отсутствие контроллера, точнее он есть, но на каждую страницу он отдельный. Тем не менее Майк говорит, что в принципе все контроллеры можно вынести в идин файл.
Qcodo очень хорошо документирован: есть полная документация его API, практически все продемонстрировано на примерах, есть видеопрезентации.
Несмотря на всю эту красоту есть один большой минус -- разработкой проекта занимается только Mike Ho и может быть еще несколько человек, что несравнимо мало по сравнению с командой Zend-а, а следовательно у Qcodo шансов со временем потухнуть гораздо больше. Майк довольно часто просто уезжает или занимается семейными делами, а Qcodo в это время развивается только за счет пользовательских классов для Qform.

-~{}~ 30.04.07 16:46:

Насчет Limb ничего сказать не могу.

-~{}~ 30.04.07 16:47:

На ZendFramework я пока ничего реального кроме тестов не писал.
 

@lexander

Новичок
Bermuda, спасибо за ответ.
[off]
А документацию по Qcodo можно скачать или она доступна только Online?
[/off]

-~{}~ 30.04.07 18:01:

Хотелось бы услышать ещё мнения относительно Limb.
 

Bermuda

Новичок
@lexander,
http://www.qcodo.com/demos/QcodoClassLibrary.pdf
Quick Reference Guide -- pdf-ка на 2 стараницы со всеми классами и списком методов и свойств, без описания -- для распечатывания и последующего вывешивания перед носом.
http://qcodo.kri-soft.be/
Проект по мануалу, кажется мертвый, но там есть pdf-как что-то вроде "getting started"
http://api.qcodo.com/
Полная документация, видимо генерированная чем-то вроде phpdoc.
 

@lexander

Новичок
Bermuda, возможно, вы уже сталкивались с подобным.
Помогите решить следующую проблему:

1. Как поместить на страницу 2 формы, чтобы не было конфликта. Например, dataGrid и форму редактирования, форму редактирования и подписку на рассылку и т.д.?
2. Пытался интегрировать Qforms в ZendFramework — идея провалилась почти на старте из-за п. 1
3. Вложенные шаблоны так же не удались (формы конфликтуют)
4. Может вы знаете, как можно "инкапсулировать" формы, т.е. возможно ли в код простого шаблона (без форм) вставить что-то наподобие:
PersonListForm::Run('PersonListForm', 'generated/person_list.tpl.php');
и
ProjectListForm::Run('ProjectListForm', 'generated/project_list.tpl.php');

В результате должна получиться страница с 2-мя формами?
 

Bermuda

Новичок
Автор оригинала: @lexander
Bermuda, возможно, вы уже сталкивались с подобным.
1. Как поместить на страницу 2 формы, чтобы не было конфликта. Например, dataGrid и форму редактирования, форму редактирования и подписку на рассылку и т.д.?
Это первая мель, но решение есть
http://examples.qcodo.com/examples/multiple_qform/intro.php
Как раз пример с формой и датагридом.

2. Пытался интегрировать Qforms в ZendFramework — идея провалилась почти на старте из-за п. 1
У меня "Helo world" на ZendFramework (как контроллер) и Qforms (как View) получилось, правде две формы не пробовал. Могу выслать заготовку.

3. Вложенные шаблоны так же не удались (формы конфликтуют)
Это со временем пройдет само собой, просто вы еще не адаптировались к идеологии фрэймфорка. Там такие вещи решаются немного по-другому, причем аж несколькими способами. Попрактикуйте еще с более простыми вещами, впоследствии идеология приживется и Вы найдете решение.

4. Может вы знаете, как можно "инкапсулировать" формы, т.е. возможно ли в код простого шаблона (без форм) вставить что-то наподобие:
PersonListForm::Run('PersonListForm', 'generated/person_list.tpl.php');
и
ProjectListForm::Run('ProjectListForm', 'generated/project_list.tpl.php');
В Qcodo шаблоны php-нативные, т. е. они должны выполняться.
В примерах
http://examples.qcodo.com/examples/
Для каждого примера есть "view source" и вроде как все разжевано. Обращаться Вы должны к контроллеру страницы, которая в свою очередь выполняет шаблон.

В результате должна получиться страница с 2-мя формами?
Для этого попробуйте использовать QPanels как на примере выше.

Честно говоря, я поначалу был очень недоволен qocodo и очень долго не мог перестроиться от web-овского асинхронного поведения приложений, к поведению Qcodo -- stateful, event-driven architecture for web-based forms. Тем не менее в итоге получилось реализовать весь задуманный функционал причем без грязных хаков.

-~{}~ 02.05.07 16:04:

З. Ы.
В большинстве случаев две формы просто не нужны.
Qcodo позволяет на разные события повесить разные действия серверной части.
Хотите две формы? Сделайте одну, но разнесенную на две части, у каждой части своя кнопка сабмита. На каждую кнопку свой обработчик события.
Хотите чтобы в каждой форме работал Enter? Аналогично на собитие нажатия enter-а в текстовом поле можно повесить обработчик.
И вообще, забудьте про количество форм. Сфокусируйтесь на событиях генерируемых пользователем.
Hint: на разные события можно вешать общий обработчик.
 

@lexander

Новичок
Хотите две формы? Сделайте одну, но разнесенную на две части, у каждой части своя кнопка сабмита. На каждую кнопку свой обработчик события.
Я как раз об этом и подумал, но если формы в 2х разных колонках таблицы?
Ладно, надо будет пока хорошенько разобраться с QPanel...

У меня "Helo world" на ZendFramework (как контроллер) и Qforms (как View) получилось, правде две формы не пробовал. Могу выслать заготовку.
Было бы интересно посмотреть. (отправьте по email advancedphpdeveloper на gmail.com)
 

Bermuda

Новичок
dark-demon
Я вас очень прошу не какать в нормальную тему и исчезнуть.
Спасибо.
 

Alexandre

PHPПенсионер
Идея обращаться к записям в базе как к объектам хоть и не нова, но иногда очень удобна.
я не сторонник всяких фреймворков, очевидно это специфика проектов. Но идею доступа к записям, как к объектам использую давно. рекомендую использовать sdo, pdo.

кстати, использование объектов данных на много упрощает проектирование страниц.
 
Сверху