"богатые" веб-приложения с Clojure

Я немного борюсь, создавая веб-приложение Clojure. Это простое приложение CRUD. Я начал исследовать веб-экосистему Clojure. Я экспериментирую с различными библиотеками, такими как Hiccup, Enlive, Compojure и Noir ( хотя Нойр, похоже, находится на грани обесценения).

Мой вопрос на самом деле два вопроса. Во-первых, это отсутствие у apparant соглашений для создания веб-приложений Clojure. А во-вторых, мне нужны некоторые подсказки по созданию "богатых" компонентов HTML.

То, что мне нравится в Clojure, - это простота создания разных библиотек. Замена призыва с помощью икоты и наоборот - это неважно. Все играет свою единственную и простую роль. Очень отличается от сложной структуры, такой как JSF.

Но есть смысл: эта великая свобода заставляет меня чувствовать себя немного потерянной. В JSF я знаю, где когда-либо есть свое место. Я использую Spring для интеграции всех компонентов, Spring -Security для обработки всего содержимого сеанса. Библиотеки компонентов освобождают меня от стресса, связанного с проблемами html, javascript и ajax.

В частности, вышеупомянутые библиотеки компонентов - это то, что мне не хватает с помощью Clojure. Я обнаружил, что реализую такие вещи, как данные, такие как переменные цвета строк, разбиение на страницы, упорядочение столбцов, инкрементный фильтр и т.д. И это оставляет мне вопросы о том, как синхронизировать состояние браузера и сервера таких компонентов, особенно когда включен ajax. Я не смог найти зрелого ответа в сети.

Преимущество фреймворков: как только вы поняли правила и ограничения, вы можете создать свое приложение и сконцентрироваться на бизнес-правилах. Техническая инфраструктура рассматривается и не должна быть отвлекающей.

Какие предложения существуют для мира Clojure? Является ClojureScript One решение? Я еще не изучил это. Кто-нибудь знает какие-либо библиотеки компонентов, которые предлагают похожие функции, например, RichTaces datatable? Есть ли предпочтительный способ общения с ajax?


Ответ 1

Все, что я могу вам дать, - это некоторые рекомендации:

  • Обмен сообщениями между клиентом и сервером в JSON или EDF
  • отделите свой графический интерфейс от кода состояния на клиенте
  • введите код управления состоянием в кроссовере, чтобы вы могли проверить его вне браузера.
  • упорядочить для вашего клиентского GUI-кода как можно более независимую от конкретной библиотеки, перейти на библиотеки с активными сообществами и наименьшие зависимости