Как я могу создать дружественную ORM nosql, не загрязняя глобальную область?
Некоторое время я работал над созданием небольшой библиотеки Ruby для взаимодействия с CouchDB, аккуратной небольшой базой документов с HTTP-интерфейсом. Ключевые особенности:
- объекты документа - прославленные хеши
- функции JavaScript Map/Reduce написаны на собственном Ruby и проанализированы в JavaScript с помощью S-выражений
- Вы можете взаимодействовать с несколькими базами данных Couch
- он должен хорошо интегрироваться с микро-фреймворками, такими как Camping
Я хочу быть в состоянии сделать что-то вроде этого:
@recipes = Recipes.all
Где "Рецепты" - это класс, определяющий пару обязательных ключей, которые есть в документе (имя класса автоматически используется в качестве "доброго" ключа).
Но тогда, в трудные времена, я мог бы сделать что-то вроде этого:
@recipes.each do |recipe|
recipe.cost = "too much!!"
recipe.push!
end
Теперь, очевидно, чтобы иметь возможность "толкать" таким образом, мне нужно, чтобы база данных была… где-то в области видимости… или чтобы сам объект документа содержал ссылку на объект базы данных? Как это делается в устоявшихся ORM, таких как ActiveRecord?
Я не хочу делать, ты знаешь, recipe.push!(@couch_database_object)
или что угодно, потому что это отвратительно! Но я не хочу быть грязным подонком.
Любой совет?