В инфраструктурах веб-разработки MVC, таких как Ruby on Rails, Django и CakePHP, HTTP-запросы направляются на контроллеры, которые извлекают объекты, которые обычно сохраняются в хранилище базы данных. Эти объекты представляют такие вещи, как пользователи, сообщения в блогах и т.д., И часто содержат логику в своих методах для разрешений, выборки и/или изменения других объектов, проверки и т.д.
Эти рамки очень объектно ориентированы. Я недавно читал о функциональном программировании, и, похоже, он обладает огромными преимуществами, такими как тестируемость, краткость, модульность и т.д. Однако большинство примеров, которые я видел для функционального программирования, реализуют тривиальные функции, такие как quicksort или последовательность fibonnacci, а не сложные webapps. Я рассмотрел несколько "функциональных" веб-фреймворков, и все они, похоже, прекрасно реализуют представление и контроллер, но в основном пропускают всю часть "модель" и "постоянство". (Я больше говорю о таких каркасах, как Compojure, которые должны быть чисто функциональными, и что-то вроде Lift, которое удобно использовать OO-часть Scala для модели, но исправьте меня, если я ошибаюсь здесь.)
Я не видел хорошего объяснения того, как функциональное программирование может быть использовано для предоставления метафоры, которую предоставляет программирование OO, то есть табличная карта для объектов и объектов может иметь методы, которые обеспечивают мощную инкапсулированную логику, такую как разрешение и валидация. Также вся концепция использования SQL-запросов для сохранения данных, похоже, нарушает концепцию "побочных эффектов". Может ли кто-нибудь объяснить, как слой модели будет реализован в функционально запрограммированной веб-каркасе?