Що таке ORM, як вона працює, і як я можу її використовувати? [зачинено]


230

Хтось запропонував використовувати ORM для проекту, який я розробляю, але у мене виникають проблеми з пошуку інформації про те, що це таке або як він працює.

Чи може хто-небудь дати мені коротке пояснення, що таке ОРМ, і як він працює, і як я повинен почати його використовувати?


8
Я знайшов це питання, але це з 2009 року, і я не знаю, чи ви вже освоюєте ORM, але шукаєте Entity Framework в CodePlex C # ( entitframework.codeplex.com ) Ось вихідний код, з якого ви можете дізнатися. Також ви можете прочитати це. ( dbtechnet.org/labs/dae_lab/Orm.pdf )
Максим

1
Просто хочу зазначити, що кулачки ORM також стосуються моделювання об'єктно-рольових en.wikipedia.org/wiki/Object-role_modeling
O-9,

1
Це корисне питання, і голоси за найкращу відповідь, здається, підтверджують це. Короткий опис того, що таке ORM, не потребує думки. Просто тому, що користувач просить посилання для початку роботи, питання позначено поза темою. Я відчуваю, що це часта реакція з боку модераторів.
NeilG

3
@NeilG Закрите запитання означає, що питання поза темою. У відповідях може бути корисна інформація, але це не робить питання на тему. Крім того, він не буде видалений, він залишатиметься тут, але нам все одно потрібно підтримувати чистоту та темність роботи, щоб вона працювала в найкращих випадках. Отже, щоб відповісти на ваш перший коментар: Це не корисне запитання, є корисні відповіді.
M--

1
@NeilG Проблема полягає в тому, що питання включає запит на ресурси (і в назві, і в запитанні). Такі запити поза темою, багато в чому тому, що в результаті люди просто публікують посилання на свій улюблений ресурс, як це траплялося в кількох відповідях тут. Якщо видалити запит на ресурси з питання, це призведе до недійсності деяких існуючих відповідей. Як постійні користувачі, нам заборонено редагувати питання, щоб визнати недійсними відповіді. Таким чином, його слід закрити. Якщо питання не було відповідено, його можна було б відредагувати, щоб видалити ці запити та залишити відкритим.
Макіен

Відповіді:


483

Вступ

Об'єктно-реляційне картографування (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, якщо ви не намагаєтесь чогось навчитися. Це гігантський твір, і старі забирали багато часу і роботи, перш ніж вони стали надійними.


50

Хто-небудь може дати мені коротке пояснення ...

Звичайно.

ORM означає "Об'єкт реляційної карти", де

  • Частина Object - це та, якою ви користуєтесь зі своєю мовою програмування (python у цьому випадку)

  • Реляційна частиною є Реляційної СУБД System (база даних , яка є) є й інші типи баз даних , але найбільш популярні є реляційної (ви знаєте , таблиці, стовпці, рк Ф.К. і т.д. , наприклад , Oracle MySQL, MS-SQL)

  • І нарешті, частина Mapping - це місце, де ви робите міст між вашими об'єктами та своїми таблицями.

У додатках, де ви не використовуєте рамку ORM, ви робите це вручну. Використання рамки ORM дозволить вам зменшити плиту, необхідну для створення рішення.

Тож скажімо, у вас є цей об’єкт.

 class Employee:
      def __init__( self, name ): 
          self.__name = name

       def getName( self ):
           return self.__name

       #etc.

і стіл

   create table employee(
          name varcar(10),
          -- etc  
    )

Використання рамки ORM дозволить вам автоматично відобразити об'єкт із записом db і написати щось на зразок:

   emp = Employee("Ryan")

   orm.save( emp )

І додати працівника до БД.

На жаль, це було не так коротко, але я сподіваюся, що це досить просто, щоб знайти інші статті, які ви прочитали.


17

ORM (Object Relational Mapper) - це фрагмент / шар програмного забезпечення, яке допомагає зіставити об'єкти коду до вашої бази даних.

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

Ось короткий кліп від Мартіна Фаулера (Data Mapper):

Шаблони відображення даних архітектури прикладних програм підприємства


4

Як і всі абревіатури, це неоднозначно, але я припускаю, що вони означають об'єктно-реляційний картограф - спосіб прикрити очі і переконатись, що під ним немає SQL, а скоріше, це всі об'єкти ;-). Не дуже правда, звичайно, і не без проблем - завжди барвистий Джефф Етвуд описав ORM як В'єтнам CS ;-). Але якщо ви мало знаєте або взагалі не маєте SQL і маєте досить просту / маломасштабну проблему, вони можуть заощадити ваш час! -)


2

Об'єктна модель стосується наступних трьох концепцій Наслідування інкапсуляції абстракції даних Реляційна модель використовувала базову концепцію відношення або таблиці. Об'єктно-реляційне відображення (АБО відображення) продукти інтегрують можливості об'єктної мови програмування з реляційними базами даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.