Clojure: разница между defrecord и defschema

Я новичок в clojure. Я хочу получить x записей с полями из базы данных и хочу вставить записи в базу данных. Какой раз я должен использовать между defrecord а также defschema по этому сценарию?

Это то же самое?

1 ответ

defschema а также defrecord не ссылаются ни на схему базы данных ("форма базы данных"), ни на записи (т. е. на строки в реляционных БД).

Схема - это библиотека для описания формы ваших данных и проверки соответствия некоторых данных этой форме. Это похоже на более позднюю версию clojure.spec. Записи Clojure - это пользовательские типы данных, которые немного похожи на Java-классы.

Легко поддаться искушению написать "объектно-ориентированную" связь БД с записями для каждой сущности. Однако вся база данных содержит данные, представляющие собой списки, карты, наборы и некоторые основные типы данных. Я предлагаю вам хранить ваши данные во встроенных структурах данных Clojure, под рукой, и не скрывать их в ненужных абстракциях. (Примечание: ваш компонент БД, а не объект БД, вполне может быть записью Clojure. Например, управление жизненным циклом с помощью компонента использует записи.)

Хорошее место для начала было бы Honey SQL, который позволяет вам строить запросы SQL как структуры данных Clojure. Вы получаете обратно данные и можете работать с ними с полной мощью Clojure.

Затем, когда вам удобно "выкладывать все свои данные открытыми (без инкапсуляции)", перейдите и опишите форму ваших данных, что является действительным, а что нет. clojure.spec это мощный инструмент для этого.

Другие вопросы по тегам