Вступ
Об'єктно-реляційне картографування (ORM) - це техніка, яка дозволяє здійснювати запити та маніпулювання даними з бази даних за допомогою об'єктно-орієнтованої парадигми. Говорячи про ORM, більшість людей посилаються на бібліотеку, яка реалізує об'єктно-реляційну технічну карту, звідси і фраза "ORM".
Бібліотека ORM - це абсолютно звичайна бібліотека, написана вашою обраною мовою, яка інкапсулює код, необхідний для маніпулювання даними, тому ви більше не використовуєте SQL; ви безпосередньо взаємодієте з об'єктом тією ж мовою, якою ви користуєтесь.
Наприклад, ось цілком уявний випадок із псевдомовою:
У вас є клас книг, ви хочете отримати всі книги, автором яких є «Лінус». Вручну ви зробите щось подібне:
book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
book = new Book();
book.setAuthor(row.get('author');
book_list.add(book);
}
З бібліотекою ORM це виглядатиме так:
book_list = BookTable.query(author="Linus");
Механічна частина доглядається автоматично через бібліотеку ORM.
Плюси і мінуси
Використання ORM економить багато часу, оскільки:
- DRY : Ви пишете свою модель даних лише в одному місці, і простіше оновити, підтримувати та повторно використовувати код.
- Багато матеріалів робиться автоматично, від обробки бази даних до I18N .
- Це змушує вас написати MVC- код, який, зрештою, робить ваш код трохи чистішим.
- Вам не доведеться писати погано сформований SQL (більшість веб-програмістів справді смоктають на ньому, оскільки SQL трактується як "під" мова, коли насправді це дуже потужний і складний).
- Дезінфекція; використовувати підготовлені виписки або транзакції так само просто, як викликати метод.
Використання бібліотеки ORM є більш гнучким, оскільки:
- Він вписується у ваш природний спосіб кодування (це ваша мова!).
- Він абстрагує систему БД, тому ви можете змінювати її коли завгодно.
- Модель слабко пов'язана з рештою програми, тому ви можете змінити її або використовувати її деінде.
- Це дозволяє використовувати доброту OOP, як спадкування даних без головного болю.
Але ORM може бути болем:
- Ви повинні цьому навчитися, а бібліотеки ORM - це не легкі інструменти;
- Ви повинні його налаштувати. Та ж проблема.
- Ефективність для звичайних запитів нормальна, але для великих проектів SQL-майстер завжди буде краще з власним SQL.
- Це реферати БД. Хоча це нормально, якщо ви знаєте, що відбувається за сценою, це пастка для нових програмістів, які можуть писати дуже жадібні заяви, як важкий удар у
for
цикл.
Як дізнатися про ORM?
Ну, використовуйте один. Яку б бібліотеку ORM ви не вибрали, всі вони використовують однакові принципи. Біля бібліотек ORM тут багато:
Якщо ви хочете спробувати бібліотеку ORM у веб-програмуванні, вам краще використовувати весь стек фреймворків, наприклад:
- Symfony (PHP, використовуючи Propel або Doctrine).
- Джанго (Python, використовуючи внутрішню ORM).
Не намагайтеся написати власну ORM, якщо ви не намагаєтесь чогось навчитися. Це гігантський твір, і старі забирали багато часу і роботи, перш ніж вони стали надійними.