Active Record проти Data Mapper-а для збереження даних

Ці 2 шаблони проектування описані в книзі Мартіна Фаулера «Шаблони корпоративних додатків» і є способами роботи зі збереженням даних в об'єктно-орієнтованому програмуванні.

Приклад шаблону Active Record

У цьому спрощеному прикладі дескриптор бази даних вводиться в конструкторі Foo (Використання ін'єкції залежностей тут дозволяє тестувати об'єкт без використання реальної бази даних), і Foo використовує його, щоб зберігати свої дані. Do_something - просто метод-заглушка, що замінює бізнес логіку.

Переваги Active Record

Недоліки Active Record

Приклад Data Mapper-а

У даному випадку, клас Foo набагато простіше і має турбуватися лише про свою бізнес-логіку. Він не тільки не повинен зберігати власні дані, він навіть не знає і не дбає про те, чи всі його дані були збережені.

Переваги Data Mapper-а

Недоліки Data Mapper-а

Сервіс-об'єкти

При використанні шаблону проектування Data Mapper, код, що викликає, повинен вибрати Mapper і бізнес-об'єкт і зв'язати їх разом. Якщо це код виклику в контролері, то зрештою ваша модель «витікає» в контролер, що може викликати великі проблеми за підтримки та юніт-тестування. Ця проблема може бути вирішена шляхом запровадження об'єкта-сервісу. Сервіс є воротами між контролером та моделлю і пов'язує доменний об'єкт з Mapper-ом у міру потреби.

Слід пам'ятати, що M MVC, являє собою шар абстракції моделі, а не об'єкт моделі. Так може бути кілька типів об'єктів в одній моделі (у наведеному вище прикладі, у вас може бути об'єкт сервісу, доменний об'єкт і об'єкт Mapper-а, що виступають у ролі єдиної моделі). З іншого боку, якщо ви використовуєте моделі Active Record, вашамодель може бути лише одним об'єктом.

Варіанти використання

Об'єкти Active Record історично були дуже популярні через те, що вони простіші, легші в розумінні і швидше в написанні, тому багато фреймворків і ORM використовують Active Record за замовчуванням.

Якщо ви впевнені, що вам ніколи не знадобиться змінювати шар збереження даних (якщо ви маєте справу з об'єктом, який представляє собою INI-файл, наприклад), або ви маєте справу з дуже простими об'єктами, в яких не так багато бізнес-логіки, або просто волієте тримати все в невеликій кількості класів, тоді шаблон Active Record це те, що вам потрібно.

Використання Data Mapper-а хоч і веде до більш чистого, простого в тестуванні та підтримці коду, і забезпечує більшу гнучкість, - ціна цьому, - підвищення складності. Якщо ви ще не пробували його використати, то дайте йому шанс, вам має сподобатися.

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»