Первый вопрос, на который нужно ответить, - действительно ли фреймворк потока - лучший инструмент для вашего конкретного веб-приложения. Я сам фанат Spring Web Flow, но я буду использовать его только в том случае, если мое веб-приложение можно легко разбить на потоки и если нужно жестко контролировать навигацию. Если навигация очень слабая, и вы можете перейти практически на любую страницу с любой другой страницы, тогда SWF не подходит для этой работы.
Как вы упоминаете, у потоковых фреймворков есть и другие недостатки. Они обычно не RESTful, и поэтому не могут быть добавлены в закладки. Если это противоречит тому, что вы хотите для своего приложения, то SWF, вероятно, не для вас.
При этом SWF и некоторые другие потоковые фреймворки предлагают некоторые функции, которые предоставляют немногие другие веб-фреймворки. Это включает в себя комплексные решения для двойной отправки проблем, а также кнопку возврата браузера и обработку истории. Реализация этих функций в SWF обеспечивает дополнительную безопасность. Поскольку идентификаторы выполнения потока для каждой страницы меняются при использовании приложения, вы получаете защиту от принудительного просмотра и некоторую защиту от подделки межсайтовых запросов.
Концепция потоков, на мой взгляд, довольно хорошая, поскольку потоки, как правило, отражают варианты использования. Обработка данных в потоке или разговоре снимает с разработчика ответственность за их очистку, что, на мой взгляд, очень хорошая вещь. Это как разница между ручным управлением памятью и сборкой мусора. Это не только делает для меня меньше работы, но и исключает возможность появления ошибок, если я забуду очистить атрибуты. Одна вещь, которую я ненавидел в Struts, заключалась в том, что мне нужно было продублировать мой код очистки в нескольких действиях для обеспечения корректности. Гораздо проще просто перенести данные в вариант использования.
Потоки также представляют контекст для связанных действий и представлений. Если я посмотрю на файл struts-config или face-config, я смогу увидеть все виды правил навигации или сопоставлений действий, но у меня нет непосредственного контекста для умственной группировки связанных элементов. Я должен вручную проследить через конфигурацию, и даже тогда иногда я застреваю. В Struts мне нужно просмотреть конкретные веб-страницы, чтобы выяснить, какие действия можно вызывать из представления.
С помощью SWF я могу четко видеть все действия, представления и модели, связанные с потоком. С плагинами Eclipse я могу видеть это как диаграмму состояний. Даже если вы не используете eclipse, очень просто перевести определение потока в диаграмму состояний. Эти диаграммы полезны для меня, моего менеджера проекта, и практически для любого, кто хочет понять, как выполняется сценарий использования. Короче говоря, объединение связанных между собой вещей позволяет легче понимать и более мелкую кривую обучения. Это одна из причин, почему ООП так популярен. В веб-приложениях идея объединения этих элементов в единое целое просто кажется естественной.