SobesLab логотип SobesLab

Ответ

В ORM прослойках встречаются два основных подхода (паттерна) сопоставления объектов и БД: Active Record и Data Mapper. Active Record – паттерн, при котором класс-модель совмещает в себе и данные, и методы для работы с БД (CRUD). Объект Active Record "знает" как сохраниться (например, метод save() внутри модели сохранит поля этой модели в базу). Примеры – Eloquent в Laravel, RedBeanPHP, компоненты AR в Ruby on Rails. Data Mapper – паттерн, где объекты доменной модели не знают о базе данных вообще; для переноса данных между объектами и БД используется отдельный слой – маппер (например, репозиторий или отдельный класс). Этот маппер берет объект и сохраняет его в БД, или наоборот, загружает из БД и строит объект. Пример – Doctrine ORM, где сущности – простые объекты (POPO), а EntityManager выступает в роли Data Mapper. Active Record проще в понимании и быстрее стартовать, но плохо разделяет ответственность (модель зависит от БД). Data Mapper сложнее, но лучше изолирует бизнес-логику от деталей хранения, что улучшает тестируемость и поддерживаемость большого проекта.