Изменения

О Java ORM

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