При создании веб-приложений в ближайшем будущем, где должны быть подготовительные операции для страницы? - PullRequest
1 голос
/ 11 марта 2012

В веб-фреймворках, таких как ruby ​​on rails, любые запросы к базе данных, необходимые для обработки определенного запроса, выполняются до того, как страница передается клиенту в классе контроллера, но для clojure ничего подобного нет. Где следует обрабатывать запросы к базам данных и тому подобное в веб-приложении clojure? Моя интуиция говорит мне, чтобы я вызывал функцию на странице сбоя и генерировал HTML внутри этой функции, но я не совсем уверен. Спасибо за ваше время и внимание.

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

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

Место, куда должны идти конкретные вещи в вашем приложении, зависит от вашей архитектуры - типичное 3-уровневое MVC выглядит не так, как полноценное масштабируемое приложение, использующее CQRS , CEP и другие модные шаблоны, которые помогут вам создать следующий Facebook или Twitter.

Если вы разрабатываете свое веб-приложение концептуально с учетом 3-уровневой архитектуры MVC, у вас будет четкое разделение между вашим уровнем представления, бизнес-логикой и уровнем персистентности. Как сказал Алекс в своем ответе - это, вероятно, контроллер, который связывает эти вещи вместе. Если у вас нет сложной бизнес-логики, ваш контроллер, скорее всего, будет вызывать функции из вашего уровня персистентности непосредственно перед передачей его логике, которая строит ваши представления.

В некоторых ситуациях может быть полезно получить данные из вашего уровня персистентности в «промежуточном программном обеспечении» - это функция, которая вызывается Ring каждый раз, когда поступает запрос. Это может быть сохраненная информация о зарегистрированном пользователе, например.

1 голос
/ 11 марта 2012

IMO, какой бы код ни генерировал ваши представления, он должен вызывать функцию и использовать результат этой функции, чтобы определять способ визуализации представления.С точки зрения Clojure контроллеры можно рассматривать как функции, вызываемые маршрутизатором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...