2009-02-19 9 views
8

Я знаю, что в чистых объектно-ориентированных языках, таких как Java, обычно имеет смысл использовать ORM, такие как Hibernate. Но что мне делать при написании функций типа CRUD в Clojure или Common LISP?Каковы наилучшие практики для функционального программирования и взаимодействия с базами данных?

Передача SQL как функции первого порядка? Но не имеет ли SQL в коде генерации HTML очень уродливый?

Спасибо,

Олек

ответ

3

Common Lisp не застенчиво FP язык. Clojure может просто использовать Hibernate.

Для обычных Lisp: databases. Вот persistent object one. И here - первая часть учебника, которая использует его с Hunchentoot, веб-сервером CL и набором динамических веб-страниц. SQL в CL can look like this (который выглядит дольше, чем на самом деле, потому что SQL горизонтально отформатирован, а CL нет). И если вам нравится, this guy работает над веб-каркасом (используя CLSQL и Elephant, уже связанный с), который нацелен на терпение, с прицелом на вызов дуги.

EDIT: a recent answer распространяется на это.

+0

CL-SQL действительно хороший, и показывает, как объектно-ориентированного и функционального могут работать вместе. – Svante

1

Ur/Web может быть интересно, хотя это не сюсюкать на основе: http://plv.csail.mit.edu/ur/

Как указано на их сайте:

Ур/Web поддерживает построение динамических веб-приложений, поддерживаемых базами данных SQL. Подпись стандартной библиотеки такова, что хорошо типизированные программы Ur/Web «не ошибетесь» в очень широком смысле. Мало того, что они не врезаться в течение определенных поколений страниц, но они также не могут:

  • Страдают от любых видов атак Код инъекции
  • Возврат недействителен HTML
  • Содержать мертвый внутри приложения ссылки
  • Не согласуются между формами HTML и полями, ожидаемыми их обработчиками.
  • Включить код на стороне клиента, который делает неверные допущения об услугах «AJAX», предоставляемых сервером удаленных веб-сайтов
  • Попытка недопустимый SQL запросов
  • Использование неправильного маршалинга или демаршалинга в связи с базами данных SQL или между браузерами и веб-серверами