В Clojure не так много веб-фреймворков с "полным стеком", и, насколько я знаю, большинство веб-приложений Clojure не созданы с их использованием. Существует набор фреймворков и инструментов, которые обрабатывают разные вещи, но вы, вероятно, разработаете свое приложение, используя эти компоненты в качестве строительных блоков. У вас есть выбор функций маршрутизации, аутентификации, рендеринга представлений, шаблонов, веб-сервисов RESTful и персистентности.
Место, куда должны идти конкретные вещи в вашем приложении, зависит от вашей архитектуры - типичное 3-уровневое MVC выглядит не так, как полноценное масштабируемое приложение, использующее CQRS , CEP и другие модные шаблоны, которые помогут вам создать следующий Facebook или Twitter.
Если вы разрабатываете свое веб-приложение концептуально с учетом 3-уровневой архитектуры MVC, у вас будет четкое разделение между вашим уровнем представления, бизнес-логикой и уровнем персистентности. Как сказал Алекс в своем ответе - это, вероятно, контроллер, который связывает эти вещи вместе. Если у вас нет сложной бизнес-логики, ваш контроллер, скорее всего, будет вызывать функции из вашего уровня персистентности непосредственно перед передачей его логике, которая строит ваши представления.
В некоторых ситуациях может быть полезно получить данные из вашего уровня персистентности в «промежуточном программном обеспечении» - это функция, которая вызывается Ring каждый раз, когда поступает запрос. Это может быть сохраненная информация о зарегистрированном пользователе, например.