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