database - ¿Cuáles son las mejores prácticas para la programación funcional y la interacción con la base de datos?
orm functional-programming (3)
Sé que en lenguajes puros orientados a objetos como Java, normalmente tiene sentido usar ORM como Hibernate. ¿Pero qué haría cuando escribo una funcionalidad de tipo CRUD en Clojure o Common LISP?
¿Pasar SQL como las funciones de primer orden? Pero ¿no es muy feo tener SQL en el código de generación de HTML?
Gracias,
Olek
Ur / Web puede ser interesante, aunque no se basa en lisp: http://plv.csail.mit.edu/ur/
Según lo citado de su sitio:
Ur / Web admite la construcción de aplicaciones web dinámicas respaldadas por bases de datos SQL. La firma de la biblioteca estándar es tal que los programas Ur / Web bien tipados "no salen mal" en un sentido muy amplio. No solo no se bloquean durante determinadas generaciones de página, sino que tampoco pueden:
- Sufre de cualquier tipo de ataque de inyección de código
- Devuelve HTML no válido
- Contiene enlaces muertos dentro de la aplicación
- Tener desajustes entre formularios HTML y los campos esperados por sus controladores
- Incluya el código del lado del cliente que hace suposiciones incorrectas sobre los servicios de estilo "AJAX" que proporciona el servidor web remoto
- Intente consultas SQL no válidas
- Usar referencias o bases de datos impropias en la comunicación con bases de datos SQL o entre navegadores y servidores web
Common Lisp no es un lenguaje consciente de FP. Clojure solo puede usar Hibernate.
Para Common Lisp: bases de datos . Aquí hay un objeto persistente . Y aquí está la primera parte de un tutorial que lo usa con Hunchentoot, un servidor web de CL y un conjunto de herramientas de página web dinámico. SQL en CL puede verse así (que parece más largo de lo que realmente es, porque el SQL tiene un formato horizontal y el CL no). Y si lo desea, este tipo está trabajando en un marco web (utilizando CLSQL y Elephant, ya enlazado) que apunta a la integridad, con la vista puesta en el desafío del arco.
EDITAR: una respuesta reciente se expande en esto.
un conjunto alternativo de herramientas Common Lisp se describe en otra respuesta