2009-02-19 7 views
8

Je sais que dans les langages orientés objet purs comme Java, il est généralement judicieux d'utiliser des ORM comme Hibernate. Mais que ferais-je lors de l'écriture d'une fonctionnalité de type CRUD dans Clojure ou Common LISP?Quelles sont les meilleures pratiques pour la programmation fonctionnelle et l'interaction avec les bases de données?

Transformer SQL en tant que fonctions de premier ordre? Mais ne pas avoir SQL dans le code HTML générant très laid?

Merci,

Olek

Répondre

3

Common Lisp est pas un auto-consciemment langue FP. Clojure peut simplement utiliser Hibernate.

Pour Lisp commun: databases. Voici un persistent object one. Et here est la première partie d'un didacticiel qui l'utilise avec Hunchentoot, un serveur Web CL et une boîte à outils dynamique. SQL dans CL can look like this (qui semble plus long qu'il ne l'est vraiment, car le SQL est formaté horizontalement et le CL n'est pas). Et si vous le souhaitez, this guy travaille sur un framework web (utilisant CLSQL et Elephant, déjà lié-à) qui vise à la réalité, avec un oeil sur le défi de l'arc.

EDIT: a recent answer se développe sur ce point.

+0

CL-SQL est vraiment sympa, et montre comment orienté objet et fonctionnel peuvent travailler ensemble. – Svante

0

un autre ensemble d'outils communs Lisp est décrit dans another answer

1

Ur/Web peut être intéressant, bien que ce n'est pas basé sur Lisp: http://plv.csail.mit.edu/ur/

cité de leur site:

Ur/Web prend en charge la construction d'applications Web dynamiques sauvegardées par des bases de données SQL. La signature de la bibliothèque standard est telle que les programmes Ur/Web bien typés "ne vont pas mal" dans un sens très large. Non seulement ils ne plantera pas au cours des générations de page en particulier, mais ils ne peuvent pas:

  • souffrent de toutes sortes d'attaques de code injection
  • Retour HTML invalide
  • contiennent des liens intra application morts
  • Avoir des discordances entre les formulaires HTML et les champs attendus par leurs gestionnaires
  • Inclure le code côté client qui fait des hypothèses incorrectes sur les services de type "AJAX" fournis par le serveur Web distant
  • Tentative non valide des requêtes SQL
  • Utilisez marshaling inapproprié ou unmarshaling en communication avec des bases de données SQL ou entre les navigateurs et les serveurs Web
Questions connexes