Я бы порекомендовал второй подход. Второй подход (подход с использованием тонкого сервера для толстого клиента), с которым вы уже знакомы, является предпочтительным подходом для все большего числа современных разработчиков, поскольку рендеринг и управление виджетами осуществляется на клиенте, что позволяет сэкономить вычислительные и пропускные расходы на сервере. Кроме того, если у вас есть сложное управление виджетами, то использование серверного кода для виджетов может стать все более сложным и неуправляемым.
Указанный вами недостаток:
шаблоны просмотра должны быть загружены в начале, когда начальный
приложение загружается так, чтобы JavaScript мог разметить разметку
на основании данных.
не правильно. Вы можете очень хорошо загружать статические шаблоны на лету при необходимости через ajax, а затем рендерить их с помощью javascript в полноценные виджеты.
Например, если у вас есть галерея изображений с компонентом редактора изображений, вы не можете загружать файлы, необходимые для редактора изображений (включая изображения, шаблоны и код рендеринга виджетов), пока пользователь фактически не решит редактировать изображение.
Используя загрузчики сценариев (например, requirejs, labjs), вы можете сначала загрузить только сценарий начальной загрузки малого и среднего размера, а затем динамически загрузить остальные сценарии в зависимости от требований.
Кроме того, мощные и зрелые библиотеки виджетов на стороне сервера доступны только для бэкэндов Java (например, vaadin). Если вы работаете с php, python или ruby backend, то написание собственной инфраструктуры пользовательского интерфейса на стороне сервера может быть серьезным излишним. Гораздо удобнее использовать клиентскую часть серверно-агонистического фреймворка javascript, например. додзё, qooxdoo и т. д.
У вас, похоже, есть склонность к клиентским фреймворкам MVC. Это хороший подход, но архитектура двойного mvc (как на сервере, так и на клиенте) часто имеет тенденцию приводить к дублированию кода и путанице. По этой причине я не рекомендую смешанный подход.
Вы можете иметь надлежащую инфраструктуру mvc во внешнем интерфейсе и только уровень модели на стороне сервера, который взаимодействует с приложением через успокоительный API (или RPC, если вы склонны).
Поскольку вы работаете с гибким фоном, я бы порекомендовал вам проверить платформу пользовательского интерфейса Ajax.org http://ui.ajax.org. Их структура пользовательского интерфейса основана на тэгах, как flex, и, хотя проект является новым, у них есть мощный набор виджетов и очень впечатляющие решения для построения графиков и привязки данных. Dojo и Ample SDK также используют систему компоновки виджетов на основе тегов.
Qooxdoo и extjs рекомендуют делать все, от макета и рендеринга до JavaScript, что может быть неудобно для вас.