Существуют ли какие-либо недостатки для SEAM?

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

Недавно я прочитал много хороших вещей о JBoss Seam, но я до сих пор не встречал человека, который его использовал. Из того, что я прочитал, кажется, что SEAM является следующим шагом JSF.

Итак, мой вопрос, для вас, кто использовал SEAM: пока вы, где работали с этой технологией, сталкивались с какими-либо недостатками? Не могли бы вы сказать, что для вас было здорово работать?

Ответ 1

Преимущество любой структуры, такой как SEAM или Grails, заключается в том, что это более высокий уровень абстракции. Он заботится о базовых деталях для вас и, если он разработан и написан хорошо, облегчает процесс.

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

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

Моим советом было бы использовать рамки и оценить преимущества, которые она приносит, но не использовать их в качестве предлога, чтобы перестать изучать, что происходит внизу. Будьте тем человеком, который мог бы написать все это вручную, без рамки, но предпочитает использовать его для предоставляемого им рычага.

Ответ 2

Я использовал Seam в текущем крупном проекте с IceFaces. Шов, безусловно, намного лучше, чем использование простой JSF (см. Ссылку, опубликованную Damo, на пару ответов выше).

Однако некоторые из проблем, которые я помню:

  • модульное тестирование: получение SeamTest для правильной работы, особенно при непрерывной интеграции, было сложным, поиск в Интернете для "проблем SeamTest". Также см. Это: Кто-нибудь успешно запускает интеграционные тесты с встроенным Jboss, Seam и Maven?
  • Несколько способов для разработчиков сделать что-то и не слишком много передовых методов документированы. Поэтому вам нужно потратить время и выяснить, что лучше для вашей проектной команды. Например, при реализации форм здесь есть потенциальные теги (обратите внимание, что некоторые из них перекрываются):

Лицевые стороны < ui: repeat >

JSTL < c: forEach >

JSF < h: form >

ICEFaces < ice: selectOneMenu >

JSF < f: selectitems >

Seam < s: button >

  • производительность является подозрительной, особенно с IceFaces, вот связанная статья. Также вам нужно знание уровня "уровня гуру" в Seam, чтобы делайте правильную вещь, по умолчанию вы попадаете в беду. Подробнее см. В этой статье: Ускорьте приложение JSF/Seam, управляемое данными двумя ордерами на величину - Часть 1
  • так как Seam 3 неизбежен и должен использовать 2 новые спецификации (JSF 2 и WebBeans), которые оставляют вопросы о том, что происходит с проектами на Seam 2, и как долго это займет, чтобы вещи стали стабильными.
  • кривая обучения. IMHO-шов пытается сделать слишком много, дает вам обертки над такими вещами, как iText, Quartz, JExcel, jBPM и т.д. И интеграция Seam с сторонними платформами, как ожидается, станет шагом позади последних версий. Например, мы должны были интегрировать jBPM напрямую, потому что нам нужны были некоторые из последних функций.
  • возможно, из-за отсутствия критериев запросов в JPA 1.X, как вы реализуете экраны динамического поиска (где пользователь заполняет множество опций фильтра, и вы должны генерировать динамический HQL), чувствовал себя очень элегантно, и это при использовании рекомендуемого класса EntityQuery "Seam Application Framework" см. приведенную ниже ссылку для простого примера, но вы можете получить представление о том, что ожидать от сложных критериев фильтра, обработки нулей, порядка и всех: Как я могу заказать запрос EntityQuery в приложении для шва?

Ответ 3

Неправильно сказать, что "Шов - следующий шаг JSF". Шов не должен использовать JSF в качестве слоя представления. Он также может использовать Wicket или GWT.

Однако при использовании с JSF он делает большую работу по его упрощению. У вас меньше XML-конфигурации, чем у стандартного JSF, и я часто забываю, что у JSF нет таких вещей, как контекст беседы или параметризованные вызовы методов в EL. например:

<h:commandButton action="#{myBean.sayHello('damo')}" value="hello"/>

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

  • Слишком большая зависимость от HTTP POST (который s:button/link не всегда решается)
  • Множество javascript
  • Чрезмерные вызовы Getters/Setters
  • Неприятный просмотр HTML; и т.д.

Есть более чем достаточно страниц с подробным описанием недостатков JSF в других местах (обратите внимание, что это не критика Seam - скорее JSF1. x и многие из них разрешены в JSF2.0)

Я не считаю, что Seam является "следующим шагом" для JSF, но он и Facelets имеют решающее значение, если вы планируете использовать JSF1.x прямо сейчас.

Я думаю, что JSF2.0 и WebBeans - следующий шаг.

Ответ 4

Если вы поместите логгер на свой компонент Seam (например, resultList), вы увидите, что Seam вызывает тот же метод много раз. Это единственное раздражающее утончение о шве. Но Seam определенно "исправил" JSF, который сам по себе перепутался. Посмотрим на JSF2. Несмотря на эти проблемы, я очень рад использовать Seam.

Ответ 5

Мне кажется естественным, и использование аннотаций облегчает жизнь. Я даже не могу представить работу с рамкой getAttribute/getParameter. Один из недостатков заключается в том, что seam-gen не работает с Maven еще (но Seam3 будет основан на Maven). Я думаю, что Seam заставляет вас сосредоточиться на том, чего вы хотите достичь, и с другими структурами вы должны думать, как это сделать. Вы когда-нибудь пытались сделать Ajax с javascript/prototype/jquery? Это действительно больно по сравнению с шовкой Ajax с вызовом метода и что делать повторно. Javascript действительно не нужен вообще с швом и Rich Faces. для меня это лучшая структура, которую я использовал.

Ответ 6

Мне нравится JSF, и я недавно оценил Seam. JSF - это веб-интерфейс пользовательского интерфейса, тогда как Seam представляет собой более общую структуру веб-приложений, которая объединяет не только JSF, но и диалоговые контексты, рабочий процесс (jBPM) и устойчивость объекта (предпочтительно EJB3). Я был впервые привлечен к Seam рекламируемыми автоподготовленными лесами, но мне никогда не приходилось работать с моей моделью данных предприятия. С тех пор меня больше интересует Spring Framework и Spring JSF. Он мне нравится как более модульный, и если вы используете iBATIS, ему нужен только контейнер сервлетов, например Tomcat, а не контейнер Java EE, такой как JBoss. Spring был дольше и имеет больший ум.

Также ICEfaces отлично сочетается с JSF и facelets, он отлично работает с или без фреймворка приложения, например Seam или Spring.

Ответ 7

Шов, как интеграционная структура, действительно продемонстрирует свою полезность в сочетании с другими фреймворками, которые вы хотите использовать.

Если вы собираетесь использовать EJB и JSF уже, SEAM является убийцей.

Если вы собираетесь использовать JSF (плюс любые связанные с ним инструменты, такие как IceFaces или RichFaces), SEAM POJO может значительно упростить вашу настройку, а также предоставить вам доступ к состояниям жизненного цикла, которые обеспечивает шов (разговор, и т.д.)

Если вы используете EJB с Wicket или GWT, Seam может также сохранить вашу конфигурацию, но я лично не использовал его в этой конфигурации.

Как было сказано, недостатки Seam присущи любой структуре абстракции: она скрывает детали от вас. Если он начинает течь, у вас проблемы. У меня его еще не было, но я также потратил время, чтобы дать мне хорошее, основное понимание того, как это работает. Как EL работает с аннотациями Seam и т.д.

Независимо от того, собираетесь ли вы найти полезный шов, это зависит от того, с какими структурами вы собираетесь его использовать. У Seam определенно есть свое сладкое пятно, но это место растет. Шов определенно не мертвый проект.:)

Ответ 8

Вы всегда можете использовать Factory annotation, чтобы избежать повторений одного и того же метода снова и снова. Factory позволяет обновлять компонент.