Что такое ORM и где я могу узнать о нем больше?

Кто-то предложил мне использовать ORM для проекта, который я разрабатываю, но у меня возникают проблемы с поиском информации о том, что это такое и как это работает. Может ли кто-нибудь дать мне краткое объяснение или ссылку, где я могу узнать больше об этом?

8 ответов

Вступление

Объектно-реляционное отображение (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 экономит много времени, потому что:

  • СУХОЙ: Вы пишете свою модель данных только в одном месте, и вам будет проще обновлять, поддерживать и повторно использовать код.
  • Многое делается автоматически, от обработки базы данных до I18N.
  • Это заставляет вас писать код MVC, что, в конце концов, делает ваш код немного чище.
  • Вам не нужно писать плохо сформированный SQL (большинство веб-программистов действительно сосут его, потому что SQL трактуется как "вспомогательный" язык, хотя на самом деле он очень мощный и сложный).
  • Санобработка; использование подготовленных операторов или транзакций так же просто, как вызов метода.

Использование библиотеки ORM более гибко, потому что:

  • Это соответствует вашему естественному способу кодирования (это ваш язык!).
  • Он абстрагирует систему БД, поэтому вы можете изменить ее, когда захотите.
  • Модель слабо связана с остальной частью приложения, поэтому вы можете изменить ее или использовать где-либо еще.
  • Это позволяет вам использовать ООП, как наследование данных без головной боли.

Но ORM может быть болью:

  • Вы должны изучить это, и библиотеки ORM не являются легкими инструментами;
  • Вы должны настроить это. Та же проблема.
  • Производительность нормальная для обычных запросов, но мастер SQL всегда будет лучше с собственным SQL для больших проектов.
  • Абстрагирует БД. Хотя это нормально, если вы знаете, что происходит за кулисами, это ловушка для новых программистов, которые могут писать очень жадные заявления, как тяжелый удар в for петля.

Как узнать об ORM?

Ну, используйте один. Какую бы библиотеку ORM вы ни выбрали, все они используют одни и те же принципы. Здесь много библиотек ORM:

Если вы хотите попробовать библиотеку ORM в веб-программировании, вам лучше использовать весь стек фреймворков, например:

  • Symfony (PHP, использующий Propel или Doctrine).
  • Django (Python, использующий внутренний ORM).

Не пытайтесь написать свой собственный ORM, если вы не пытаетесь чему-то научиться. Это гигантская работа, и старым потребовалось много времени и работы, прежде чем они стали надежными.

Может ли кто-нибудь дать мне краткое объяснение...

Конечно.

ORM означает "объект-реляционное сопоставление", где

  • Часть Object - это та, которую вы используете со своим языком программирования (в данном случае с python)

  • Реляционная часть - это система управления реляционными базами данных (база данных). Существуют и другие типы баз данных, но наиболее популярными являются реляционные (вы знаете таблицы, столбцы, pk fk и т. Д., Например, 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 позволит вам автоматически сопоставить этот объект с записью БД и написать что-то вроде:

   emp = Employee("Ryan")

   orm.save( emp )

И сотрудник вставлен в БД.

К сожалению, это не было так кратко, но я надеюсь, что это достаточно просто, чтобы найти другие статьи, которые вы прочитали

ORM (Object Relational Mapper) - это часть / слой программного обеспечения, которое помогает сопоставить ваши объекты кода с вашей базой данных.

Некоторые обрабатывают больше аспектов, чем другие... но цель состоит в том, чтобы снять часть веса уровня данных с плеч разработчика.

Вот краткий клип от Мартина Фаулера (Data Mapper):

Шаблоны картографических данных архитектуры корпоративных приложений

Первая глава книги Hibernate Java Persistence with Hibernate (3-е изд.) Содержит превосходный обзор общих концепций ORM и обсуждает мотивацию и дизайн ORM. Настоятельно рекомендуется, даже если вы не работаете с Java.

Как и все аббревиатуры, это неоднозначно, но я предполагаю, что они имеют в виду объектно-реляционное отображение - способ скрыть ваши глаза и убедить, что под ними нет SQL, а скорее все объекты;-). Конечно, не совсем так, и не без проблем - всегда красочный Джефф Этвуд называл ORM Вьетнамом CS;-). Но, если вы плохо знаете или не знаете SQL, и имеете довольно простую / мелкую проблему, они могут сэкономить ваше время!-)

Storm - отличный вариант для тех, кто использует python.

Объектная модель связана со следующими тремя концепциями Наследование инкапсуляции данных. Наследование В реляционной модели использовалась базовая концепция отношения или таблицы. Продукты объектно-реляционного отображения (OR mapping) объединяют возможности языка объектного программирования с реляционными базами данных.

Это огромная тема. Поднимите хорошую книгу о гибернации, и она должна подробно объяснить ORM, прежде чем приступить к изучению материала.

https://www.hibernate.org/

DALMP http://code.google.com/p/dalmp/ может быть хорошим вариантом для php/mysql, который в настоящее время поддерживает множество бэкэндов кэша, таких как redis/memcache/apc

Другие вопросы по тегам