Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   ExtJS и серверный фреймверк - как лучше сделать? (https://javascript.ru/forum/extjs/46699-extjs-i-servernyjj-frejjmverk-kak-luchshe-sdelat.html)

xintrea 19.04.2014 21:31

ExtJS и серверный фреймверк - как лучше сделать?
 
Интересует вопрос о том, как лучше использовать ExtJS с серверными PHP-фреймверками.

То есть, вопрос по архитектуре приложения.

Когда начинаешь работать с ExtJS, получается, что вся логика сосредоточена на клиенте в JavaScript. А на сервере должны существовать только сервисы-ответчики, которые предоставляют данные (по AJAX) клиентским JS-моделям.

Поэтому вопрос 1 - имеет ли смысл использовать ZendFramework или там Yii или там CodeIgniter? Или это будет сплошной оверхед? Достаточно ли просто пользоваться на сервере возможностями PHP плюс какой-нибудь ORM?

Вопрос 2 - где и как хранить код объектов ExtJS? Хранить как статику в в видет простых файлов в директории? Хранить в директории видов PHP-фреймверка и генерировать JS-код PHP-фреймверком? Какие-то смешанные техники?

Вопрос 3 - имеет ли смысл использовать совместно с ExtJS библиотеку JQuery?

В общем, расскажите, как у вас устроены приложения с ExtJS.

Makarov 19.04.2014 22:11

1. Я не пхпшник, поэтому хз. Вообще очевидно зависит от того какая логика ожидается на сервере, и нужны ли навороты предоставляемые фреймворками. Системы "навороченный клиент" + "навороченный сервер" тоже возможны и встречаются, все зависит от задач.
Там где я работаю, сервер написан на .net и логики там много.
На клиенте тоже много)

2. Генерировать приложения на extjs серверным php? Мсье знает толк) По каким причинам Вы собираетесь это делать?)
View мы правда тоже генерим с помощью sencha architect, но самому писать такую штуку убьешься.
архитектура взаимодействия - rest
Код храним просто как статические файлы, mvc позволяет в них не путаться, на продакшне храним минифицированный файл для юзера и все остальное для отладки.

3. Я такое тоже видел, использовать их вместе вполне возможно даже в больших приложениях, они друг друга не переписывают. Вот только зачем? Jquery - это как шило. Им можно успешно делать что-то одно, лаконично и хорошо. Extjs - это как швейцарский армейский нож - в нем есть все необходимое, и еще вагон всего что никогда не пригодится. Шило тоже есть, правда не столь удобное.

xintrea 19.04.2014 23:19

Цитата:

Сообщение от Makarov (Сообщение 308450)
Генерировать приложения на extjs серверным php? Мсье знает толк) По каким причинам Вы собираетесь это делать?)

Ну, например, когда нужно сделать универсальный класс экранной таблицы. Чтобы не в JS коде статически прописывать имена полей, URL-ы для CRUD-обработчиков и прочие свойства. А чтоб весь этот JS-код генерировался на сервере.

Или так не делается, ибо очень сложно?

Makarov 20.04.2014 00:38

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

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

xintrea 20.04.2014 23:37

Понял, спасибо.

novikov 21.04.2014 17:03

Sencha Cmd создаёт свою структуру директорий
 
Компания Sencha бесплатно раздаёт разработчикам приложений на ExtJs свой продукт для автоматизации Sencha Cmd

Эта программа способна собирать все ваши классы и классы SDK, используемые в вашем приложении, в один сжатый файл.

У меня структура директорий выглядит приблизительно так:

Код:

www
    data
          sdk
              ext-4.2.1
    private
          workspace
                build
                      production
                          Superfotoalbum
                                index.html
                ext
                superfotoalbum
                      app
                          controller
                          model
                          store
                          view
                          Application.js
                      index.html
    public
          server
          client
                index.html

В директории ext-4.2.1 я запустил sencha generate workspace, чтобы заполнить директорию workspace.
Затем из директории ext запустил sencha generate app, чтобы заполнить директорию superfotoalbum.
Код приложения помещаю в директорию app, а в браузере открываю index.html, который расположен уровнем выше.
Когда всё готово, запускаю из директории app команду sencha app build, которая собирает приложение и кладёт его в папку production/Superfotoalbum.
Для окончательной проверки открываю index.html из этой папки, а затем переношу всё её содержимое в директорию client, которую и отправляю на боевой сервер.
На сервере лёгкий MVC-фреймворк на PHP(bulletphp) или NodeJs (express). Общение браузера с сервером чистый Ajax, Rest или RPC.

siber-biber 22.04.2014 05:08

Цитата:

Сообщение от xintrea (Сообщение 308462)
Ну, например, когда нужно сделать универсальный класс экранной таблицы. Чтобы не в JS коде статически прописывать имена полей, URL-ы для CRUD-обработчиков и прочие свойства. А чтоб весь этот JS-код генерировался на сервере.

Или так не делается, ибо очень сложно?

Может иметь смысл если у вас много гридов.. но вряд ли правильно на каждый запрос дергать базу данных. Я делал вариацию на эту тему .."полуавтоматика": генерим статические js классы скриптом один раз (ну и можно перегенерировать вручную если структура таблиц поменялась)

bankir 24.06.2014 14:19

У нас небольшие веб приложения. База на Oracle.

Я вообще сделал свой мини Web сервер на Java, который умеет отдавать статичные файлы с настроенной папки с кэшированием (ext, свои приложения) и по определенному урлу передавать json данные в БД Oracle в процедуры (через clob переменные), которые уже делают в БД то что требуется.
Никаких прослоек в виде php и прочих серверных скриптов нет :)
Веб сервер поддерживает сессионность.

Но повторяюсь, у нас небольшие веб приложения - не сложные.

Вот тут есть описание одного такого нашего приложения:
http://absinversion.blogspot.ru/2014/06/blog-post.html

Rastiniak 15.04.2015 20:51

novikov,
Подскажите, пожалуйста, мне нужна подобная структура

--public
----index.html
----build
----src
------app.js
------app

Как заставить bootstrap.js искать файлы не в public, а в src?
Как билдить в build?

bastrakov 16.04.2015 09:33

Цитата:

Сообщение от xintrea (Сообщение 308444)
...
То есть, вопрос по архитектуре приложения.

1 Достаточно ли просто пользоваться на сервере возможностями PHP плюс какой-нибудь ORM?

2 - где и как хранить код объектов ExtJS? Хранить как статику в в видет простых файлов в директории?

3 - имеет ли смысл использовать совместно с ExtJS библиотеку JQuery?

ExtJs берет на себя кучу работы. в этом и + и -.
поэтому архитектура приложения может быть вырождена до примитивизма на более низких уровнях (база, бизнес).

1) достаточно тупых ответов базы, обернутых в json.
2) статика js очень сильно упрощает сопровождение. любой автогенеримый код - головная боль поддержки.
3) нет. ExtJs имеет очень мощные средства подобные jQuery.

быстро-бегом архитектуру текущего проекта упомянул тут
http://bastrakof.livejournal.com/363117.html

khusamov 21.04.2015 12:40

Цитата:

Сообщение от xintrea (Сообщение 308444)

Поэтому вопрос 1 - имеет ли смысл использовать ZendFramework или там Yii или там CodeIgniter? Или это будет сплошной оверхед? Достаточно ли просто пользоваться на сервере возможностями PHP плюс какой-нибудь ORM?

Вопрос 2 - где и как хранить код объектов ExtJS? Хранить как статику в в видет простых файлов в директории? Хранить в директории видов PHP-фреймверка и генерировать JS-код PHP-фреймверком? Какие-то смешанные техники?

Вопрос 3 - имеет ли смысл использовать совместно с ExtJS библиотеку JQuery?

В общем, расскажите, как у вас устроены приложения с ExtJS.




1) Ext JS работает с сервером при помощи RESTfull. Этот протокол является основным для Ext, но не обязательным. Этот протокол хорошо поддерживает Zend Framework 2. Там все уже есть. Я лично сам так и соединяю клиент и сервер. Работает на ура.

2) Клиентскую часть на Ext можно хранить в рамках приложения на Zend Framework 2, а можно хранить вообще в другом месте. Как удобнее разработчику. Я генерирую при помощи Zend Framework 2 только первый index.html чтобы туда заложить настройки Ext-приложения.

3) Не имеет. Но мне больше нравится JQuery, чем Ext, в плане работы с селекторами. Поэтому я их иногда смешиваю.

nohuhu 21.05.2015 22:13

Цитата:

Сообщение от khusamov (Сообщение 367610)
1) Ext JS работает с сервером при помощи RESTfull. Этот протокол является основным для Ext, но не обязательным.

Поправка: Ext JS работает с сервером при помощи Proxy, которых есть много разных на любой вкус. Помимо REST в коробке есть ещё JsonP и Ext.Direct. Я всегда пропагандирую последний, т.к. на мой взгляд RPC интерфейсы имеют массу преимуществ перед REST во многих приложениях, и изрядно недооценены.

Можно к этому добавить, что если штатные варианты транспорта чем-то не устраивают, то вам никто не мешает написать свой вариант прокси. Как примеры можно привести SOAP и AMF, которые хоть и не идут в штатной коробке Ext JS, но доступны как пакеты в Sencha Complete.

khusamov 21.05.2015 22:42

Да, действительно. Правда работая с Ext у меня сложилось ощущение что именно RESTfull для них самый главный.

nohuhu 21.05.2015 23:43

RESTful интерфейсы очень просто сляпать по-быстрому для примеров, именно поэтому они и доминируют и в документации, и собственно в примерах кода.

Для больших живых приложений ситуация не совсем совпадает. Да, правильно спроектированный RESTful интерфейс может решить все или почти все задачи, но кто и где видел правильно спроектированный RESTful интерфейс? Я вот лично не видел, везде хак на косяке и костылём подпирает.

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

Хотя я конечно понимаю, что "просто бери и используй" не очень интересно, RESTful велосипеды изобретать гораздо увлекательней. ;)

khusamov 21.05.2015 23:46

Спасибо за ответ. В следующем проекте обязательно попробую RPC вместо REST. А то я RPC так, теоретически знаю что он есть, как соап и прочее.

nohuhu 21.05.2015 23:48

SOAP городить ради своего проекта смысла нет, это очень специфическая штука. В Ext JS есть коннектор для SAP, который по SOAP разговаривает, но протокол довольно сложный и если у вас на серверной стороне не SAP, то и не нужный вовсе.

Смотрите в сторону Ext.Direct, это более простой вариант RPC.

novikov 22.05.2015 13:22

Вложений: 1
Ext.direct интересен пакетной отправкой запросов на сервер. Использовал с четвёртой версией ExtJs. Не обязательно запрашивать сложные вложенные структуры, чтобы сократить количество запросов и ускорить работу приложения. Возможен простой маппинг: таблица в базе - модель в ExtJs. Там есть хитрость - запросы отправляемые из форм имеют особый статус. Нужно правильно догадаться, как загружать файлы. Вообще, удобно запускать серверные функции прямо из клиентского кода.

Сейчас использую REST-подобное API, потому что мой PHP код утрачен и не было времени писать этот слой под пятую версию ExtJs. Но главная причина в том, что с сервером работет не только ExtJs, а ещё, например, Jira. Не писать же на Джаве механизм подобный директу. Да и тема о лицензиях на форуме и потенциальное сокращение сообщества заставляет думать об ослаблении привязки к особенностям Экста.

В ресте у меня CRUD для каждой таблицы базы данных. Причём read существует в трёх вариантах: 1) одна строка для форм; 2) несколько строк с фильтрацией, группировкой и разбиением на страницы для гридов; 3) одна строка таблицы, но в виде вложенной структуры, которая содержит данные из связанных таблиц, для кастомных компонентов.

khusamov 22.05.2015 15:29

а что там с лицензиями не так? хотят бесплатное отменить?

novikov 22.05.2015 15:46

нет, не хотят. Нельзя теперь купить лицензию на одного разработчика, а только на пятерых, и цена у неё конская. И ещё не все релизы ExtJs имеют бесплатную версию.

khusamov 22.05.2015 15:49

А для чего конкретно в России покупают Ext JS? Разве нельзя обойтись бесплатной версией?

novikov 22.05.2015 15:57

Лицензия GPL заражает всё коммерческое решение оперсорсностью.


GNU GPL не позволяет включать программу в проприетарное ПО


Наверное, есть люди, которые делают сайты на продажу зарубеж. Или покупают, чтобы первыми получать багфиксы, а не тратить своё время на исправление ошибок.


Часовой пояс GMT +3, время: 12:37.