Изменения

О Java ORM

1689 байтов добавлено, 13:44, 17 февраля 2016
Нет описания правки
* Серьёзные минусы вроде отсутствуют, разве что логика отображения та же, что в JPA
== Идея Идея — PHP-like ORM ==
* 1 часть — объект Объект «соединение». Умеет делать запросы в синтаксически кратком стиле (возможно, Fluent API) и возвращать записи в виде чего-то типа Map<String,String> или Map<String,Object>. Кроме того, является аналогом сессии/persistence manager’а для моделей.* 2 часть — базовый Базовый класс модели. Запись БД хранит запись, полученную из БД, в виде такого же объекта Map, никуда не вытаскиваетраскладывая её по своим полям. Создание Благодаря этому создание модели = максимально легковесно - это просто вызов конструктора, который только делает 1 действие - сохраняет к себе этот Map.* Все вычислимые значения — например, загружаемые ассоциации — хранятся в ещё одном Map’е. Есть общие геттер и сеттер, работающие по названию поля и возвращающие, кэширующие и вычисляющие дополнительные значения.* В модели есть ссылка на "грязную"/"чистую" копию и флаг, какой является текущая. Как только кто-то начинает модифицировать модель - объект создаёт свою копию, а сам становится "грязным".* Логика сохранения в БД также живёт в модели, в виде одного метода типа save(), или, возможно, saveAll(), если в основу класть массовые операции. Это похоже на стиль ActiveRecord, с той только разницей, что в модель всё-таки нужно передавать объект «соединение».* В модели есть ссылка на resultset, частью которого она является - это позволяет подгружать связи массово.* Круче всего, если класс модели не абстрактный и позволяет с собой работать вообще без создания дочерних классов.