SlideShare une entreprise Scribd logo
1  sur  39
Какой фреймворк нам нужен
         для web
Коротко о себе
• Пишу программы с 1988 года
• 10+ профессиональный опыт в IT
• 10+ из них team lead/PM в разных
  пропорциях
• Автор ряда статей по архитектуре ПО и
  менеджменту http://goo.gl/pIYzP
• Работаю в компании DataArt
2 минуты про DataArt

• Большая маленькая компания
• Гибкие и подвижные
• Инженерный менеджмент
• Самая нелинейная компания    из   всех,
  которые я знаю
• Разумный менеджмент
Постановка вопроса
Зачем нужен web framework?
• В начале были Servlets & JSP, но сайт средних
  размеров без дополнительного структурирования
  это АД
• JSF появляется позже, он хорош, но не совершенен
• Мир многообразен и одного фреймворка для всех и
  навсегда видимо быть не может. Для разных
  сегментов разные требования (enterprise, public
  web, mobile web, …)
• Всего существует >50 фреймворков (http://java-
  source.net/open-source/web-frameworks)
• Что выбрать?
Возможные углы
                       зрения
• Какой фреймворк будет самым-самым для
  проекта
 (быстрым, простым, масштабируемым и т.п.)
• Какой фреймворк лучше всего выбрать на
  длительную перспективу (кто автор,
  community, supportability, перспективы
  развития, …)
• Какую технологию изучить, чтобы быть
  востребованным на рынке труда
О каких фреймворках
                      поговорим
«Нельзя объять необъятное»
• Struts 1/2
• Wicket
• JSF
• Spring MVC

• Хочется больше, но время поджимает
Что такое web фреймворк с
прагматической точки зрения
Запрос пользователя
     “stripped”
Например
protected void doPost(
         HttpServletRequest request,
         HttpServletResponse response)
                  throws ServletException, IOException {

    String name = request.getParameter("name"); //взяли параметры запроса
    String welcomeMessage = "Welcome "+name; //подготовили ответ
    response.setContentType("text/html"); //начали преобразовывать его в поток байтов

    PrintWriter out = response.getWriter();

    out.println("<html><body>");
    out.println("<h1>"+welcomeMessage+"</h1>");
    out.println("</body></html>"); // готово

}
Сервлеты это круто,
        зачем еще что-то?

Сервлеты и JSP в руках упорного , но не изобретательного
               разработчика - это страшно
Зачем фреймворк
Фактически любой фреймворк дает нам в обмен
на один или несколько из пунктов
• Падение производительности
• Сложности с масштабированием (иногда
  вплоть до полной невозможности)
• Время на изучение, иногда необходима
  существенная ломка сознания
• Ограничения функционала и/или
  совместимости
• Еще что-то плохое ;-)
… дает нам взамен
Что-то из нижеследующего
• Декларативная валидация и/или мапинг
  параметров/путей
• Различного рода удобства и/или гибкость в
  рендеринге ответа (вплоть до своего
  декларативного языка описания страниц (ZK))
• Структурирование кода (Model 1, MVC, IoC и
  т.п.), что уменьшает стоимость владения
  кодом,    ибо   последущим     поколениями
  программистов проше понять что/где
• Локализация/интернационализация
… или даже такое
• Продвинутое управление контекстом (session beans, conversation/page
  scope, и т.п.)
• Declarative pageflow (декларативное управление последовательностью переходов между
   страниц?)
• Ускоренная разработка UI за счет возможности использования RAD
  (тут мы скорее говорим о некоторых породах JSF). По моему опыту
  разработка типовых форм на JSF может ускоряться до 5 раз
• Автоматизация каких-то традиционно сложных аспектов, например
  AJAX
• Прозрачная, 2-way интеграция с html дизайном (Tapestry, Wicket)
• Подмена (частичная) элементов web стека Java стеком (GWT,
  WebOnSwing, …) /очень популярная тема, не хотели в свое время Java
  программисты учить web стек/
• Упрощенное, декларативное создание web сервисов
• Защита от double POST
• И многое, много другое …
Сравниваем

Что мы покупаем за наши деньги в различных фреймворках
Struts 1/2
•   Model 2 фреймворк
•   Помощь в обработки и валидации форм
•   Относительно простая архитектура
•   Легко изучать / расширять / интегрировать
•   Популярен, Struts знает куча людей
•   Быстрый, не ограничивает сервлет контейнер
•   Документация не супер
•   Морально несколько устарел, not hot
•   Большая путаница между версиями 1 и 2 при поиске
•   Скорее процедурная, чем объектная модель
Struts: Выводы
• Эта технология совершенно точно работает
  и работает как надо
• Она простая и легко изучаемая
• Но скорее всего делать сайт на Struts будет
  не так быстро и не так весело. При этом все
  равно скорее всего Вам не помешает как
  минимум Spring IoC
JSF
                                 светлая сторона
• Первый и единственный фреймворк от офицального производителя,
  часть JavaEE
• Очень гибкий
• Очень быстро делается UI из «стандартных кубиков»
• Большое сообщество, много книг, много курсов, базовая часть реально
  проста в изучении
• Гибкая декларативная валидация форм, гибкий рендеринг ответа (как
  пример - можно заставить рендерить в Swing для десктопа)
• Большое количество стандартных UI компонентов, даже есть
  библиотеки компонентов (кто помнит torry.ru?)
• Много других мелких позитивных фишек (e.g. прозрачный
  декларативный AJAX в IceFaces/RichFaces, Enterprise надстройка JBoss
  SEAM и т.п.)
• Создан с учетом ошибок существовавших в тот момент фреймворков, в
  т.ч. Struts.
• Несколько top industry quality реализаций стандарта
Казалось бы, собаководы
     рекомендуют?
JSF темная сторона
• В версии 1.х - вообще не пригоден для
  public web ибо:
  – Потребляет неоправданно много памяти
  – Простые вещи могут неожиданно сильно
    нагружать CPU
  – Очень большой размер сесии делает
    фактически невозможной репликацию сессий
    (если у Вас не bloody enterprise ).
…
• Проблемы с совместимостью версий и интеграцией
  с JavaEE спецификацией
• Фактически миграция с JSF 1.1 на JSF 1.2 требует
  миграции версии контейнера, что возможно далеко
  не всегда, запуск двух приложений на разных
  версиях JSF требует модификации контейнера
• Отрисовка произвольного web UI из стандартных
  компонент может быть очень трудоемка
• Интеграция с JavaScript на странице возможна, но не
  тривиальна
…
• Смешивание JSF & JSP превращает web
  страницы в ад
• Реализация REST сервисов непроста
• Настройка security также может быть не
  тривиальна
• Bookmarkable страницы возможно делать с
  помощью специального разрешения
• Генерирует много лишнего, очень сложно
  контролировать точное содержание HTML
  страницы. В том числе может подключать к
  странице множество ненужных ресурсов
JSF: Выводы
JSF исключительно хорош для быстрого
создания интранет приложений с упором на
бизнес логику и компонентный подход

Использовать для public web или чего-то
сильно нестандартного можно только если Вы
действительно очень хорошо понимаете, что
Вы делаете (и на всякий случай, у Вас есть
план Б). В общем, лучше не надо.
Wicket
• Быстрый,      ориентированный     на    2-way
  интеграцию с web дизайнером фремворк
• Хорош для Java (но не для web) разработчиков
• Java код и html плотно связаны
• Активное community, hot topic
• Быстрый, позволяет хорошо контролировать
  потребление памяти сессией
• Совершенно точно пригоден для public web
Что же в нем плохо
• Изучать реально сложно, Ваш опыт web разработки
  на «классическом» фреймворке Вам не поможет и
  даже немного помешает, многие вещи делаются
  очень странным образом
• По умолчанию чудовищные URL страниц, к счастью
  в последнее время проблема исправляется с
  помощью специальных аннотаций
• Управление ресурсами не тривиально. Куда
  правильнее класть HTML, JavaScript и картинки – до
  сих пор предмет обсуждения. Есть несколько
  вариантов, но все они не без недостатков
Wicket: Выводы
• Если Вы хорошо знаете Wicket и перед Вами
  не стоит задача быстро расширять команду,
  то с Wicket Вы будете счастливы
• Но для изучения фреймворк крайне не
  прост. Если у Вас нет опыта работы с ним,
  новый проект на Wicket лучше не начинать
• В целом есть варианты и попроще
Spring MVC
• Классический MVC фреймворк
• Начиная с версии 3 избавился от многих своих
  традиционных недостатков
• Быстрый, можно очень хорошо контролировать работу с
  памятью, URL, наполнение страниц, рендеринг
  (позволяет для разных случаев использовать разные
  способы рендеринга страниц)
• Наверное, идеален для REST сервисов
• Spring IoC фактически индустриальный стандарт
• Очень и очень популярен, отличная документация,
  очень прост в обучении
• Простые вещи делаются просто, сложные сложнее, все
  логично
И на солнце есть
                               пятна
• Фреймворк достаточно стар, успел набрать плохую
  карму в ранних реинкарнациях
• В некоторых случаях конфигурация может быть не
  столь проста
• Проект активно ударился в коммерциализацию, что
  немного раздражает (хотя в сравнении с JSF – Spring
  просто ангелы)

• Вообще, наверное, есть еще недостатки, но мне
  сейчас сложно ругать Spring MVC, потому что он мне
  субъективно нравится. Недостатки Spring MVC,
  взятые из Интернет, относятся к ранным версиям.
Тут я еще много что хотел рассказать,
    но время поджимает, если Вас
 интересует тема, расспросите меня,
   например, про GWT в перерыве
Тенденции
• HTML 5 шагает по планете, что практически
  ведет к большому спросу на AJAX
• Всё больше людей знает JavaScript
• JQuery стал крайне популярен
• Google научился при поиске частично
  выполнять JavaScript на страницах
• Все хотят запускать сайты в облаке на куче
  дешевых серверов по $20 за пучок
Мой персональный
                          выбор
• Enterprise – JSF 2 AND ((Spring IoC + Spring …)
  OR (EJB 3.1 + SEAM))
• Public Spring MVC + Spring * без ORM cо
  Spring JDBC. Rich Internet Application много
  JQuery, JQuery плагины и много AJAX.
Куда пойти учиться?
                 2011   2012
                               6000
    Struts       2056   1977
    JSF           943    940
    Wicket         58     52   5000
    Spring MVC    803   1049
    Servlet              504
                               4000
    GWT                  443
    Tapestry              60
    JQuery              5038   3000
                                                   2011

                               2000                2012



                               1000


                                  0




По данным сайта dice.com
Вопросы
Спасибо
Вдруг хватит времени???
Tapestry
• Быстрый, ориентированный на 2- way интеграцию с web
  дизайнером фремворк
• Компонентно ориентирован, причем компоненты могут
  наследоваться друг от друга
• Код пишется быстро
• Ориентирован       на       решение      практических
  задач, быстрый, экономно расходует память. Есть
  примеры очень удачных сайтов на tapestry с большим
  кол-вом посетителей
• Позволяет контролировать html страницу с точностью до
  байта. Что бывает крайне необходимо для mobile web
  сайтов.
• Содержит много полезных фичей, расширяем.
Что нехорошо
• Не прост для изучения, есть ряд нетривиальных
  моментов,          требующих         перестройки
  сознания,                           документация
  отвратительная, литературы мало
• Фактически Tapestry – это один человек, который
  лидирует развитие фреймворка с самого начала
• Не очень популярен
• Community не развито
• Получить четкие URL для всех страниц приложения
  все еще не тривиально, раньше было еще хуже 
• Некоторые очевидные вещи могут делаться
  достаточно неочевидным образом
Tapestry: Выводы
• Если Вы хорошо знаете Tapestry и перед
  Вами не стоит задача быстро расширять
  команду, то с Tapestry Вы будете счастливы
• Но для изучения фреймворк крайне не
  прост. Если у Вас нет опыта работы с
  ним, новый проект на Tapestry лучше не
  начинать

Contenu connexe

Tendances

Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was coolAndrey Tokarchuk
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPOleg Poludnenko
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Ontico
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Ontico
 
Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥Oleg Poludnenko
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработкеITCrowd Almaty
 
Что такое современная Frontend разработка
Что такое современная Frontend разработкаЧто такое современная Frontend разработка
Что такое современная Frontend разработкаDevOWL Meetup
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Ontico
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetOleg Tsarev
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENBAleksandr Boichenko
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskAlex Chistyakov
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
Асинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.jsАсинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.jsGeeksLab Odessa
 
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчикаДмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчикаYandex
 

Tendances (20)

Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was cool
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHP
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
 
Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодняSECON'2016. Васильков Василий, Серверное программирование сегодня
SECON'2016. Васильков Василий, Серверное программирование сегодня
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
 
Что такое современная Frontend разработка
Что такое современная Frontend разработкаЧто такое современная Frontend разработка
Что такое современная Frontend разработка
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
 
Как разраба
Как разрабаКак разраба
Как разраба
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENB
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon Saransk
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
Асинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.jsАсинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.js
 
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчикаДмитрий Кушников — БЭМ глазами бэкенд-разработчика
Дмитрий Кушников — БЭМ глазами бэкенд-разработчика
 

En vedette

Продуктивная разработка Java EE-приложений с применением Oracle ADF
Продуктивная разработка Java EE-приложений с применением Oracle ADFПродуктивная разработка Java EE-приложений с применением Oracle ADF
Продуктивная разработка Java EE-приложений с применением Oracle ADFDmitry Nefedkin
 
Java Enterprise without Java
Java Enterprise without JavaJava Enterprise without Java
Java Enterprise without JavaOlena Syrota
 
Software engineering 101 - The basics you should hear about at least once
Software engineering 101 - The basics you should hear about at least onceSoftware engineering 101 - The basics you should hear about at least once
Software engineering 101 - The basics you should hear about at least onceAlexey (Mr_Mig) Migutsky
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Nikita Lipsky
 
Введение в веб каркас Struts2
Введение в веб каркас Struts2Введение в веб каркас Struts2
Введение в веб каркас Struts2Evgeniy Krivosheev
 

En vedette (8)

Spring.new hope.1.3
Spring.new hope.1.3Spring.new hope.1.3
Spring.new hope.1.3
 
Продуктивная разработка Java EE-приложений с применением Oracle ADF
Продуктивная разработка Java EE-приложений с применением Oracle ADFПродуктивная разработка Java EE-приложений с применением Oracle ADF
Продуктивная разработка Java EE-приложений с применением Oracle ADF
 
Java Enterprise without Java
Java Enterprise without JavaJava Enterprise without Java
Java Enterprise without Java
 
Software engineering 101 - The basics you should hear about at least once
Software engineering 101 - The basics you should hear about at least onceSoftware engineering 101 - The basics you should hear about at least once
Software engineering 101 - The basics you should hear about at least once
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.
 
Введение в веб каркас Struts2
Введение в веб каркас Struts2Введение в веб каркас Struts2
Введение в веб каркас Struts2
 
Основы Java. 4. Web
Основы Java. 4. WebОсновы Java. 4. Web
Основы Java. 4. Web
 
Prezentation knitu 14_03_2015
Prezentation knitu 14_03_2015Prezentation knitu 14_03_2015
Prezentation knitu 14_03_2015
 

Similaire à Какой фреймворк нам нужен для Web? Денис Цыплаков

Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноRoman Dvornov
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014Anna Tarasenko
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)Alexander Gornik
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...Ontico
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendenciesDarkestMaster
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 

Similaire à Какой фреймворк нам нужен для Web? Денис Цыплаков (20)

Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
Sivko
SivkoSivko
Sivko
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
Скорость не в ущерб качеству, web-разработка на Java, Java day, Omsk, 2014
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
Highload 2011-demona
Highload 2011-demonaHighload 2011-demona
Highload 2011-demona
 
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
 
Mobile web apps
Mobile web appsMobile web apps
Mobile web apps
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 

Plus de Alex Tumanoff

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiAlex Tumanoff
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikAlex Tumanoff
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAlex Tumanoff
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony CoxAlex Tumanoff
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1Alex Tumanoff
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Alex Tumanoff
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...Alex Tumanoff
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevAlex Tumanoff
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoAlex Tumanoff
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsAlex Tumanoff
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковAlex Tumanoff
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapterAlex Tumanoff
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAlex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergAlex Tumanoff
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITAlex Tumanoff
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений FirefoxAlex Tumanoff
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...Alex Tumanoff
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programmingAlex Tumanoff
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8Alex Tumanoff
 

Plus de Alex Tumanoff (20)

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen Nedaskivskyi
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene Polonichko
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony Cox
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton Vidishchev
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey Klimenko
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey Morenets
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей Рыбаков
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapter
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri Aizenberg
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в IT
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений Firefox
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programming
 
Lambda выражения и Java 8
Lambda выражения и Java 8Lambda выражения и Java 8
Lambda выражения и Java 8
 

Какой фреймворк нам нужен для Web? Денис Цыплаков

  • 1. Какой фреймворк нам нужен для web
  • 2. Коротко о себе • Пишу программы с 1988 года • 10+ профессиональный опыт в IT • 10+ из них team lead/PM в разных пропорциях • Автор ряда статей по архитектуре ПО и менеджменту http://goo.gl/pIYzP • Работаю в компании DataArt
  • 3. 2 минуты про DataArt • Большая маленькая компания • Гибкие и подвижные • Инженерный менеджмент • Самая нелинейная компания из всех, которые я знаю • Разумный менеджмент
  • 4. Постановка вопроса Зачем нужен web framework? • В начале были Servlets & JSP, но сайт средних размеров без дополнительного структурирования это АД • JSF появляется позже, он хорош, но не совершенен • Мир многообразен и одного фреймворка для всех и навсегда видимо быть не может. Для разных сегментов разные требования (enterprise, public web, mobile web, …) • Всего существует >50 фреймворков (http://java- source.net/open-source/web-frameworks) • Что выбрать?
  • 5. Возможные углы зрения • Какой фреймворк будет самым-самым для проекта (быстрым, простым, масштабируемым и т.п.) • Какой фреймворк лучше всего выбрать на длительную перспективу (кто автор, community, supportability, перспективы развития, …) • Какую технологию изучить, чтобы быть востребованным на рынке труда
  • 6. О каких фреймворках поговорим «Нельзя объять необъятное» • Struts 1/2 • Wicket • JSF • Spring MVC • Хочется больше, но время поджимает
  • 7. Что такое web фреймворк с прагматической точки зрения
  • 9. Например protected void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); //взяли параметры запроса String welcomeMessage = "Welcome "+name; //подготовили ответ response.setContentType("text/html"); //начали преобразовывать его в поток байтов PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>"+welcomeMessage+"</h1>"); out.println("</body></html>"); // готово }
  • 10. Сервлеты это круто, зачем еще что-то? Сервлеты и JSP в руках упорного , но не изобретательного разработчика - это страшно
  • 11. Зачем фреймворк Фактически любой фреймворк дает нам в обмен на один или несколько из пунктов • Падение производительности • Сложности с масштабированием (иногда вплоть до полной невозможности) • Время на изучение, иногда необходима существенная ломка сознания • Ограничения функционала и/или совместимости • Еще что-то плохое ;-)
  • 12.
  • 13. … дает нам взамен Что-то из нижеследующего • Декларативная валидация и/или мапинг параметров/путей • Различного рода удобства и/или гибкость в рендеринге ответа (вплоть до своего декларативного языка описания страниц (ZK)) • Структурирование кода (Model 1, MVC, IoC и т.п.), что уменьшает стоимость владения кодом, ибо последущим поколениями программистов проше понять что/где • Локализация/интернационализация
  • 14. … или даже такое • Продвинутое управление контекстом (session beans, conversation/page scope, и т.п.) • Declarative pageflow (декларативное управление последовательностью переходов между страниц?) • Ускоренная разработка UI за счет возможности использования RAD (тут мы скорее говорим о некоторых породах JSF). По моему опыту разработка типовых форм на JSF может ускоряться до 5 раз • Автоматизация каких-то традиционно сложных аспектов, например AJAX • Прозрачная, 2-way интеграция с html дизайном (Tapestry, Wicket) • Подмена (частичная) элементов web стека Java стеком (GWT, WebOnSwing, …) /очень популярная тема, не хотели в свое время Java программисты учить web стек/ • Упрощенное, декларативное создание web сервисов • Защита от double POST • И многое, много другое …
  • 15. Сравниваем Что мы покупаем за наши деньги в различных фреймворках
  • 16. Struts 1/2 • Model 2 фреймворк • Помощь в обработки и валидации форм • Относительно простая архитектура • Легко изучать / расширять / интегрировать • Популярен, Struts знает куча людей • Быстрый, не ограничивает сервлет контейнер • Документация не супер • Морально несколько устарел, not hot • Большая путаница между версиями 1 и 2 при поиске • Скорее процедурная, чем объектная модель
  • 17. Struts: Выводы • Эта технология совершенно точно работает и работает как надо • Она простая и легко изучаемая • Но скорее всего делать сайт на Struts будет не так быстро и не так весело. При этом все равно скорее всего Вам не помешает как минимум Spring IoC
  • 18. JSF светлая сторона • Первый и единственный фреймворк от офицального производителя, часть JavaEE • Очень гибкий • Очень быстро делается UI из «стандартных кубиков» • Большое сообщество, много книг, много курсов, базовая часть реально проста в изучении • Гибкая декларативная валидация форм, гибкий рендеринг ответа (как пример - можно заставить рендерить в Swing для десктопа) • Большое количество стандартных UI компонентов, даже есть библиотеки компонентов (кто помнит torry.ru?) • Много других мелких позитивных фишек (e.g. прозрачный декларативный AJAX в IceFaces/RichFaces, Enterprise надстройка JBoss SEAM и т.п.) • Создан с учетом ошибок существовавших в тот момент фреймворков, в т.ч. Struts. • Несколько top industry quality реализаций стандарта
  • 20. JSF темная сторона • В версии 1.х - вообще не пригоден для public web ибо: – Потребляет неоправданно много памяти – Простые вещи могут неожиданно сильно нагружать CPU – Очень большой размер сесии делает фактически невозможной репликацию сессий (если у Вас не bloody enterprise ).
  • 21. … • Проблемы с совместимостью версий и интеграцией с JavaEE спецификацией • Фактически миграция с JSF 1.1 на JSF 1.2 требует миграции версии контейнера, что возможно далеко не всегда, запуск двух приложений на разных версиях JSF требует модификации контейнера • Отрисовка произвольного web UI из стандартных компонент может быть очень трудоемка • Интеграция с JavaScript на странице возможна, но не тривиальна
  • 22. … • Смешивание JSF & JSP превращает web страницы в ад • Реализация REST сервисов непроста • Настройка security также может быть не тривиальна • Bookmarkable страницы возможно делать с помощью специального разрешения • Генерирует много лишнего, очень сложно контролировать точное содержание HTML страницы. В том числе может подключать к странице множество ненужных ресурсов
  • 23. JSF: Выводы JSF исключительно хорош для быстрого создания интранет приложений с упором на бизнес логику и компонентный подход Использовать для public web или чего-то сильно нестандартного можно только если Вы действительно очень хорошо понимаете, что Вы делаете (и на всякий случай, у Вас есть план Б). В общем, лучше не надо.
  • 24. Wicket • Быстрый, ориентированный на 2-way интеграцию с web дизайнером фремворк • Хорош для Java (но не для web) разработчиков • Java код и html плотно связаны • Активное community, hot topic • Быстрый, позволяет хорошо контролировать потребление памяти сессией • Совершенно точно пригоден для public web
  • 25. Что же в нем плохо • Изучать реально сложно, Ваш опыт web разработки на «классическом» фреймворке Вам не поможет и даже немного помешает, многие вещи делаются очень странным образом • По умолчанию чудовищные URL страниц, к счастью в последнее время проблема исправляется с помощью специальных аннотаций • Управление ресурсами не тривиально. Куда правильнее класть HTML, JavaScript и картинки – до сих пор предмет обсуждения. Есть несколько вариантов, но все они не без недостатков
  • 26. Wicket: Выводы • Если Вы хорошо знаете Wicket и перед Вами не стоит задача быстро расширять команду, то с Wicket Вы будете счастливы • Но для изучения фреймворк крайне не прост. Если у Вас нет опыта работы с ним, новый проект на Wicket лучше не начинать • В целом есть варианты и попроще
  • 27. Spring MVC • Классический MVC фреймворк • Начиная с версии 3 избавился от многих своих традиционных недостатков • Быстрый, можно очень хорошо контролировать работу с памятью, URL, наполнение страниц, рендеринг (позволяет для разных случаев использовать разные способы рендеринга страниц) • Наверное, идеален для REST сервисов • Spring IoC фактически индустриальный стандарт • Очень и очень популярен, отличная документация, очень прост в обучении • Простые вещи делаются просто, сложные сложнее, все логично
  • 28. И на солнце есть пятна • Фреймворк достаточно стар, успел набрать плохую карму в ранних реинкарнациях • В некоторых случаях конфигурация может быть не столь проста • Проект активно ударился в коммерциализацию, что немного раздражает (хотя в сравнении с JSF – Spring просто ангелы) • Вообще, наверное, есть еще недостатки, но мне сейчас сложно ругать Spring MVC, потому что он мне субъективно нравится. Недостатки Spring MVC, взятые из Интернет, относятся к ранным версиям.
  • 29. Тут я еще много что хотел рассказать, но время поджимает, если Вас интересует тема, расспросите меня, например, про GWT в перерыве
  • 30. Тенденции • HTML 5 шагает по планете, что практически ведет к большому спросу на AJAX • Всё больше людей знает JavaScript • JQuery стал крайне популярен • Google научился при поиске частично выполнять JavaScript на страницах • Все хотят запускать сайты в облаке на куче дешевых серверов по $20 за пучок
  • 31. Мой персональный выбор • Enterprise – JSF 2 AND ((Spring IoC + Spring …) OR (EJB 3.1 + SEAM)) • Public Spring MVC + Spring * без ORM cо Spring JDBC. Rich Internet Application много JQuery, JQuery плагины и много AJAX.
  • 32. Куда пойти учиться? 2011 2012 6000 Struts 2056 1977 JSF 943 940 Wicket 58 52 5000 Spring MVC 803 1049 Servlet 504 4000 GWT 443 Tapestry 60 JQuery 5038 3000 2011 2000 2012 1000 0 По данным сайта dice.com
  • 35.
  • 37. Tapestry • Быстрый, ориентированный на 2- way интеграцию с web дизайнером фремворк • Компонентно ориентирован, причем компоненты могут наследоваться друг от друга • Код пишется быстро • Ориентирован на решение практических задач, быстрый, экономно расходует память. Есть примеры очень удачных сайтов на tapestry с большим кол-вом посетителей • Позволяет контролировать html страницу с точностью до байта. Что бывает крайне необходимо для mobile web сайтов. • Содержит много полезных фичей, расширяем.
  • 38. Что нехорошо • Не прост для изучения, есть ряд нетривиальных моментов, требующих перестройки сознания, документация отвратительная, литературы мало • Фактически Tapestry – это один человек, который лидирует развитие фреймворка с самого начала • Не очень популярен • Community не развито • Получить четкие URL для всех страниц приложения все еще не тривиально, раньше было еще хуже  • Некоторые очевидные вещи могут делаться достаточно неочевидным образом
  • 39. Tapestry: Выводы • Если Вы хорошо знаете Tapestry и перед Вами не стоит задача быстро расширять команду, то с Tapestry Вы будете счастливы • Но для изучения фреймворк крайне не прост. Если у Вас нет опыта работы с ним, новый проект на Tapestry лучше не начинать