En marcos de desarrollo web MVC como Ruby on Rails, Django y CakePHP, las solicitudes HTTP se enrutan a los controladores, que captan objetos que generalmente se conservan en un almacén de bases de datos de fondo. Estos objetos representan cosas como usuarios, publicaciones en blogs, etc., y a menudo contienen lógica dentro de sus métodos para permisos, búsqueda y/o mutación de otros objetos, validación, etc.¿Cómo se implementaría el 'Modelo' en una aplicación web Rails en un lenguaje de programación funcional?
Estas estructuras están todas orientadas a objetos. He estado leyendo recientemente sobre programación funcional y parece proponer enormes beneficios como la capacidad de prueba, la concisión, la modularidad, etc. Sin embargo, la mayoría de los ejemplos que he visto para la programación funcional implementan funcionalidades triviales como quicksort o la secuencia fibonnacci, no webapps complejos. He visto algunos frameworks web 'funcionales', y todos parecen implementar la vista y el controlador muy bien, pero en gran medida se saltean toda la parte 'modelo' y 'persistencia'. (Estoy hablando más sobre frameworks como Compojure que se supone que son puramente funcionales, versus algo Lift que convenientemente parece usar la parte OO de Scala para el modelo, pero corríjanme si me equivoco aquí)
No he visto una buena explicación de cómo se puede usar la programación funcional para proporcionar la metáfora que proporciona la programación OO, es decir, las tablas mapean a los objetos, y los objetos pueden tener métodos que proporcionen una lógica potente y encapsulada como permisos y validación. También todo el concepto de usar consultas SQL para persistir datos parece violar todo el concepto de 'efectos secundarios'. ¿Podría alguien proporcionar una explicación de cómo se implementaría la capa 'modelo' en un marco web funcionalmente programado?
Los lenguajes funcionales intentan limitar los efectos secundarios sí. Pero la limitación siempre está dentro de los límites del programa. Los almacenes de datos y IO viven fuera de los límites de la aplicación, por lo que son aceptables. Una vez que los datos han llegado dentro de la aplicación, entonces las transformaciones y el enrutamiento de esos datos deben ser comprensibles y deterministas. –