|
|
|
Object Relational Mapping system
Когда-то давным давно(в далекой-далекой галактике...) попытались мы
использовать Hibernate но он был изначально рассчитан для серверных
приложений, вставлял свои прокси-объекты где его не просили,
извлекал всю цепочку связанных объектов или ничего не извлекал и
слишком плотно был связан маппингом, загружаемым при запуске...
Вот и возникла такая идея - создать простую и понятную систему ORM
небольшого размера которая могла бы работать как на клиенте так и на
сервере, не вставляла своих прокси-объектов там где их не ожидаешь и
позволяла настраивать и маппинг и специфику извлечения групп
объектов в Runtime - во время исполнения программы, извлекала из
базы данных только то что в данный момент, в данном контексте
использования необходимо приложению а не то что прописано в маппинге
один раз и навсегда, базировалась на JDBC, делала процесс извлечения
объектов из базы данных и сохранения их обратно абсолютно прозрачным
и предсказуемым. Чтобы маппинг делался легко и без ошибок и не
засорял ни код классов ни директории приложения своим присутствием.
Чтобы приложение по возможности вообще не было в курсе что его
объекты где-то там сохраняют. Чтобы могла работать не только с
объектами но и просто с наборами данных ,которые могут изменяться во
время работы...
Продукт изначально был сделан под Eclipse но теперь может работать и
без него. Создавать маппинг в стандартном еклипсовом редакторе точек
расширения гораздо удобнее чем руками xml теги писать. Проекту уже
три года - применялся он на нескольких больших проектах здесь
выложена уже вторая версия - после рефакторинга и удаления лишнего.
В пакете плагинов есть плагин с JUnit тестами - они демонстрируют
функциональность, скорость и надежность работы.
Уникальные свойства
- Можно извлечь из базы сложную структуру объектов(связанных или
не связанных между собой) причем в каждой ветке могут быть свои
условия. Эту же структуру можно удалить из базы или сохранить в
базу(может быть в другую - количество и вид неограничены) или
сериализовать и передать на удаленный толстый клиент, где затем
положить в локальную базу и работать с ней точно таким же образом.
- Извлечение связанных объектов - что как и на какую глубину - не
задается жестко маппингом а настраивается в зависимости от
контекста использования.
- Система к способна работать с абстрактными наборами данных, не
привязанных к каким-либо классам - например если при создании
объекта маппинга(или в его xml описании) вы не укажете имя класса -
то получится просто именованный набор данных из одной таблицы. Без
привязки к каким-либо классам, класслоадерам и пр. Но точно так же
- как и класс - по имени - вы сможете его извлекать из базы, менять
и сохранять снова. За счет такой отвязки от вопроса загрузки
классов экономится время и вычислительная мощность машины -
например чтобы извлечь из одной базы кучу объектов и сохранить в
другую вовсе не обязательно их инстанцировать, даже если такие
классы были замаппированы заранее и класслоадер знает как их
загружать - инстанцирование производится непосредственно там где
пользователь ожидает получить объект а внутри системы перемещаются
простые иерархические объекты одного вида, содержащие двумерные
массивы Object[][]. Это означает что впоследствии - когда система
уже у заказчика и занята важным делом - вам не нужно ломать голову
над перекомпиляцией для добавления каких-то классов в работающую
систему если вдруг требования изменились - без этого можно обойтись
и вообще предусмотреть в вашем продукте работу с именованными
наборами данных а не объектами.
- Малый размер - примерно 120 KB
|
|
|
|
|
|
|