java список - Какую структуру я должен выбрать-Seam, Wicket, JSF или GWT?





фреймворков рейтинг (10)


Seam - это среда приложения, а не слой презентации. Первоначально он был разработан для того, чтобы сделать JSF менее болезненным, но превратился в более общую концепцию инъекций зависимостей.

Я считаю, что вы можете использовать Seam с JSF, Wicket и GWT. Поддержка JSF является первичным и превосходным; Я не уверен, насколько хорошо поддерживаются два других.

Поскольку фокус ваших критериев, по-видимому, является конкурентоспособностью ваших навыков, я бы предложил попробовать Seam и JSF через Facelets. JSF является хорошо принятым стандартом и на самом деле приятен в использовании, если вы используете Facelets. Вы можете использовать функциональность AJAX с помощью Richfaces и Ajax4jsf. Шов более или менее стандартизован через JCP.

Я обсуждаю, использовать ли Seam, Wicket, JSF или GWT в качестве основы для моего уровня представления в проекте Java.

Я сузил свой выбор веб-фреймворков Java до этого подмножества, основываясь на соображениях рынка труда, новизне технологии и рекомендациях других пользователей SO.

Какие факторы следует принимать во внимание при решении этих проблем?







JSF устарел (JSF даже не указан в качестве рамки для сравнения, когда евангелисты сравнивают или говорят о веб-фреймворках в 2010 году).

Теперь полномасштабные приложения большого масштаба создаются с использованием GWT, YUI, JQuery и т. Д.

Прочитать некоторые статьи по Google и выше будут очевидны.

(ВСЕ JOBS на JSF должны поддерживать устаревшие приложения).




Я начал с JSF (1.1 и 1.2), и было так больно, что я решил изменить в следующих проектах. Я немного исследовал, и я решил попробовать Wicket, и это было так приятно. Также я пробовал JSF 2, но все равно то же самое.

Оба они являются компонентами, но вещи с Wicket легки, а JSF - полный беспорядок.

Каретка над JSF:

  • В Wicket HTML HTML. JSF имеет свои собственные метки разметки. H: dataTable (для таблиц) - нонсенс. Поверьте мне, Sun Engineers пришлось выпить, когда он был разработан.
  • В Wicket такие вещи, как безопасность,
  • С помощью JSF на навигационной панели отображается предыдущий URL-адрес. Действительно странно.
  • JSF кажется мне очень тяжелым, и с такими библиотеками, как Rich или Prime, еще больше.
  • Иногда кажется невозможным узнать, что происходит. Вы всегда орали на свой компьютер, потому что вы не знаете, почему JSF делает.

JSF через Wicket:

  • В Wicket вы собираетесь написать больше Java (привязка к HTML). По крайней мере, ваша IDE предоставит поддержку рефакторинга и проверки.
  • Управление ресурсами в Wicket немного сложно.
  • Существует гораздо больше документации и поддержки JSF

Одним из распространенных недостатков является то, что размер сеанса является проблемой (поскольку там хранятся графические компоненты).

В общем, если вам нужно решить только между Wicket и JSF, не сомневайтесь для меня, Wicket .




Мой опыт в хронологическом порядке:

Сырые сервлеты - (да, много тяжелой работы, но это были ранние дни, и мы были беспечными бобрами!)

JSP - Я думал, что это был beez neez в то время, когда он вышел (если бы мы только знали;))

Echo - Awesome framework, но не для страниц, которые должны быть дружественными поисковой системе (такая же проблема с GWT)

Wicket - Удивительная структура - разработчики полностью понимают концепцию OO (в отличие от JSP и многих других) и применили все обычные OO-тонкости к этой структуре. Если вы цените «повторное использование», если вы цените инкапсуляцию, если вы цените разделение проблем, и если вы хотите привязать свою модель к пользовательскому интерфейсу, не беспокоясь о сортировке объектов и других подобных уродствах, то это основа для вас!




Я использовал GWT с версии 1.4 и JSF с тех пор, как появилась спецификация 2.0.

GWT - это клиентская среда, она генерирует JavaScript с Java. Ваша архитектура будет чистым клиент-сервером, что означает:

  • Лучше всего использовать крупнозернистые услуги
  • Все объекты, которые отправляются на клиентскую сторону, должны быть полностью сериализуемыми (это означает, что нет ленивой нагрузки или шаблона OpenSessionInView)
  • Начиная с GWT 2.0 вы можете создавать свои gui с помощью xhtml, что намного проще в отношении стиля и структурирования HTML
  • GWT склоняется к хорошей архитектуре, если вы ее испортите, это будет плохо для рефакторинга
  • Perfect History (кнопка «Назад назад», «Закладки для закладки») сложно , вам, вероятно, придется сворачивать самостоятельно, хотя ее легко взломать

JSF - это основанная на компонентах инфраструктура, с дизайном первого вида (если вам нравится код):

  • Легче сделать некоторый тип webapps (stateful, как корзина)
  • JSF + Seam имеют поддержку для разговоров (подумайте, как страницы, похожие на мастера, которые сохраняют состояние на нескольких страницах)
  • Вы можете реализовать OpenSessionInView, в зависимости от вашего стека. Вероятно, это не рекомендуется, если вы используете EJB для служебного / бизнес-уровня
  • JSF2 имеет превосходную поддержку AJAX, а с набором компонентов, например RichFaces, вы можете создавать приятные webapps
    • Но если вы хотите изысканное поведение JavaScript, вам придется написать javascript
  • JSF отслеживает текущее состояние пользовательского интерфейса на стороне клиента или на стороне сервера. Это компромисс между сетевым трафиком или памятью сервера.

Продолжить:

  • GWT более подходит для веб- приложений (думаю, gmail), которые требуют наилучшей производительности на стороне клиента. Легко писать пользовательские компоненты (вы пишете Java), и поскольку ваша серверная часть - это только уровень сервиса, вы можете быть полностью безгосударственным на стороне сервера.
  • JSF более подходит для приложений CRUD, которые лучше подходят для компонентов, ориентированных на компоненты: подумайте о системе бронирования отелей / рейсов, интернет-магазине с корзиной и т. Д.



Спасибо, ребята из калитки за то, что оставались трезвыми и продолжали обсуждать эту дискуссию. Я пользователь калитки, и мне это нравится. Мои главные причины:

  1. Его компонентная структура. Мне нравится работать с компонентами, а не с полными страницами.
  2. Я могу позволить дизайнерам работать с шаблонами и страницами, когда я работаю над java-частями

  3. Нет ничего нового, чтобы учиться. Его «просто java и просто HTML»

  4. Мне нравится его резервный механизм ajax. Там, где в браузере нет поддержки JavaScript, особенно на мобильных устройствах, он возвращается к простому html, и все работает.
  5. Отсутствие конфигурации xml - плюс
  6. Он поддерживает все, что я хочу в веб-приложении. например, валидация, интернационализация, поддержка обратной кнопки и другие полезные URL-адреса

Мой предыдущий опыт - GWT и JSF 1.0




Я использовал Wicket и GWT довольно сильно. Никогда не научился любить Wicket.

Мое электронное сообщение об этом было http://salk31.blogspot.com/2009/07/wicket-ajax.html

Глядя на GWT 2.0, uiBinder сегодня напомнил мне, насколько досадно было в Wicket сопоставлять дерево компонентов XML с тем, что было создано на Java. Движение GWT на этом выглядит намного лучше для меня.

Я больше не использовал Wicket больше года, поэтому, возможно, они исправили много этого, но, учитывая современный браузер и поддержку JS, я не вижу смысла делать все это на сервере (я знаю, я знаю локальность данных).




Единственный из тех, что я использовал, - это JSF, поэтому я не смогу дать вам отзывы о других, но вот мой подход к JSF. По моему опыту, в ту минуту, когда мы превратились из JSF в JSP в JSF в личиках, жизнь стала намного проще, поэтому я сосредоточусь на лицах. Кроме того, похоже, что Seam и JSF не являются взаимоисключающими.

Плюсы:

  • Создание компонентов xhtml facelets прост, что способствует повторному использованию.
  • Достойные возможности шаблонирования с использованием встроенных тегов, таких как ui: insert, ui: include и ui: decorate
  • Простой доступ к Spring beans через face-config
  • Основанные на XHTML веб-разработчики, незнакомые с java, могут быть эффективными
  • Хорошая библиотека виджетов доступна в tomahawk / trinidad

Минусы:

  • Только запросы на отправку. Это может затруднить создание закладок.
  • Не так, как встроенный ajax-y как GWT, но это может быть исправлено при использовании с Seam

Я ни в коем случае не специалист в JSF / Facelets, поэтому я уверен, что есть другие, которых я пропустил. Надеюсь, кто-то еще будет разбираться.

Обновление для JSF 2.0:

  • Имеет еще лучшие возможности повторного использования с составными компонентами
  • Библиотеки виджетов для 2.0 включают в себя перфорированные и моджаррские шкалы
  • Позволяет получать запросы и закладки
  • Создал поддержку Ajax
  • См. http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/ для получения дополнительной информации о JSF 2



JSR305 и FindBugs являются авторами того же человека. Оба они плохо поддерживаются, но являются такими стандартными, как они есть, и поддерживаются всеми основными IDE. Хорошей новостью является то, что они хорошо работают как есть.

Вот как применить @Nonnull ко всем классам, методам и полям по умолчанию. См. https://.com/a/13319541/14731 и https://.com/a/9256595/14731

  1. Определить @NotNullByDefault
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.annotation.Nonnull;
import javax.annotation.meta.TypeQualifierDefault;


    /**
     * This annotation can be applied to a package, class or method to indicate that the class fields,
     * method return types and parameters in that element are not null by default unless there is: <ul>
     * <li>An explicit nullness annotation <li>The method overrides a method in a superclass (in which
     * case the annotation of the corresponding parameter in the superclass applies) <li> there is a
     * default parameter annotation applied to a more tightly nested element. </ul>
     * <p/>
     * @see https://.com/a/9256595/14731
     */
    @Documented
    @Nonnull
    @TypeQualifierDefault(
    {
        ElementType.ANNOTATION_TYPE,
        ElementType.CONSTRUCTOR,
        ElementType.FIELD,
        ElementType.LOCAL_VARIABLE,
        ElementType.METHOD,
        ElementType.PACKAGE,
        ElementType.PARAMETER,
        ElementType.TYPE
    })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface NotNullByDefault
    {
    }

2. Добавьте аннотацию к каждому пакету: package-info.java

@NotNullByDefault
package com.example.foo;

ОБНОВЛЕНИЕ : По состоянию на 12 декабря 2012 года JSR 305 указан как «Бездействующий». Согласно документации:

JSR, который был признан «бездействующим» Исполнительным комитетом, или тот, который достиг своей естественной продолжительности жизни.

Похоже, что JSR-308 превращает его в JDK 8, и хотя JSR не определяет @NotNull, это делает соответствующая платформа Checkers Framework . На момент написания этой статьи плагин Maven был недоступен из-за этой ошибки: https://github.com/typetools/checker-framework/issues/183







java jsf seam wicket web-frameworks