Вход/Регистрация
Программирование на языке Ruby
вернуться

Фултон Хэл

Шрифт:

Классической реализацией является пакет Prevayler, написанный на языке Java. Версия для Ruby называется Madeleine.

Madeleine годится не для всех приложений. У методики преобладающих объектов есть собственные правила и ограничения. Все объекты должны, во-первых, помещаться в памяти; во-вторых, быть сериализуемы.

Объекты должны быть детерминированы, то есть вести себя одним и тем же образом при получении одних и тех же данных. (Следовательно, применение системного таймера или случайных чисел оказывается под вопросом.)

Объекты должны быть по возможности изолированы от ввода/вывода (файлов и сети). Обычно весь ввод/вывод выполняется вне системы преобладающих объектов.

Наконец, любая команда, которая изменяет состояние системы преобладающих объектов, должна иметь вид объекта-команды (то есть для таких объектов тоже должна иметься возможность сериализации и сохранения).

Madeleine предлагает два основных метода доступа к системе объектов. Метод

execute_query
позволяет выполнить запрос или получить доступ для чтения. Метод
execute_command
инкапсулирует любую операцию, которая изменяет состояние объектов в системе.

Оба метода принимают в качестве параметра объект

Command
. По определению такой объект должен иметь метод
execute
.

Работа системы состоит в том, что во время исполнения приложения она периодически делает моментальные снимки всей системы объектов. Команды сериализуются наравне с другими объектами. В настоящее время не существует способа «откатить» набор транзакций.

Трудно привести содержательный пример использования этой библиотеки. Если вы знакомы с Java-версией, рекомендую изучить API для Ruby и освоить ее таким образом. Хороших руководств нет — может быть, вы напишете первое.

10.2.8. Библиотека DBM

DBM
— платформенно-независимый механизм для хранения строк в файле, как в хэше. И ключ, и ассоциированные с ним данные должны быть строками. Интерфейс
dbm
включен в стандартный дистрибутив Ruby.

Для использования этого класса нужно создать объект DBM, указав для него имя файла, а дальше работать с ним, как с обычным хэшем. По завершении работы файл следует закрыть.

require 'dbm'

d = DBM.new("data")

d["123"] = "toodle-oo!"

puts d["123"] # "toodle-oo!"

d.close

puts d["123"] # RuntimeError: закрытый DBM-файл.

e = DBM.open("data")

e["123"] # "toodle-oo!"

w=e.to_hash # {"123"=>"toodle-oo!"}

e.close

e["123"] # RuntimeError: закрытый DBM-файл.

w["123"] # "toodle-oo!

Интерфейс к DBM реализован в виде одного класса, к которому подмешан модуль

Enumerable
. Два метода класса (синонимы)
new
и
open
являются синглетами, то есть в любой момент времени можно иметь только один объект DBM, связанный с данным файлом.

q=DBM.new("data.dbm") #

f=DBM.open("data.dbm") # Errno::EWOULDBLOCK:

# Try again - "data.dbm"

Всего есть 34 метода экземпляра, многие из которых являются синонимами или аналогичны методам хэша. Почти все операции с настоящим хэшем применимы и к объекту

dbm
.

Метод

to_hash
создает представление файла в виде хэша в памяти, а метод
close
закрывает связь с файлом. Остальные методы по большей части аналогичны методам хэшам, однако дополнительно есть методы
rehash
,
sort
,
default
,
default=
. Метод
to_s
возвращает строковое представление идентификатора объекта.

10.3. Библиотека KirbyBase

KirbyBase — небольшая библиотека, с которой должен освоиться каждый программист на Ruby. В настоящее время она не входит в стандартный дистрибутив, а если бы входила, то была бы еще полезнее.

KirbyBase — плод трудов Джейми Криббса (Jamey Cribbs), названный, к слову, в честь его собаки. Во многих отношениях это полноценная база данных, но есть причины, по которым мы рассматриваем ее здесь, а не вместе с MySQL и Oracle.

Во-первых, это не автономное приложение. Это библиотека для Ruby, и без Ruby ее использовать нельзя. Во-вторых, она вообще не знает, что такое язык SQL. Если вам без SQL не обойтись, то эта библиотека не для вас. В-третьих, если приложение достаточно сложное, то функциональных возможностей и быстродействия KirbyBase может не хватить.

  • Читать дальше
  • 1
  • ...
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: