Объектная персистентность
Требования
Реализовать библиотеку поддержки непрерывности существования (persistence)
иерархии объектов с поддержкой объектной выборки в предметно-ориентированных
терминах (DSL).
Рекомендуется использовать языки Clojure/Ruby/Java. Способ хранения объектов
может быть выбран на усмотрение разработчика, однако он не должен влиять на API
или объекты пользователя. Требования:
- поддрежка отношений между объектами:
- One-To-One;
- One-To-Many (с управлением жизненным циклом, т.е.
агрегация или композиция);
- Поддержка отношения Many-To-One;
- библиотека должна предоставлять API с базовыми операциями "сохранить",
"загрузить", "удалить";
- библиотека должна предоставлять API для выполнения объектных запросов
(query DSL) и (в зависимости от языка) механизмы генерации кода по объектной модели
пользователя для построения внутреннего DSL (достаточно будет поиска объектов по совпадению
атрибутов с поддержкой выражений NOT, AND, OR).
Дополнительные требования
- Реализовать поддержку наследования
- Реализовать поддержку ленивой инициализации коллекций объектов
- Реализовать в DSL с поддержку проекций, т.е. выборок определенных свойств
объектов с формированием нового объекта.
Рекомендации
Ознакомьтесь с аналогичным механизмом в языке C# (язык запросов и т.д.)