Что такое ORM, как он работает и как его использовать? [закрыто]


230

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

Кто-нибудь может дать мне краткое объяснение, что такое ORM и как он работает, и как мне начать использовать его?


8
Я нашел этот вопрос, но это с 2009 года, и я не знаю, освоили ли вы уже ORM, но ищите Entity Framework в CodePlex C # ( entityframework.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 Закрытый вопрос означает, что вопрос не по теме. Там может быть полезная информация в ответах, но это не делает вопрос по теме. Кроме того, он не будет удален, он останется здесь, но нам все еще нужно держать SO в чистоте и по теме, чтобы он функционировал в лучшем виде. Итак, чтобы ответить на ваш первый комментарий: это не полезный вопрос, есть полезные ответы.
М--

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 экономит много времени, потому что:

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

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

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

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

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

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

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

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

  • Symfony (PHP, использующий Propel или Doctrine).
  • Django (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 позволит вам автоматически сопоставить этот объект с записью в базе данных и написать что-то вроде:

   emp = Employee("Ryan")

   orm.save( emp )

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

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


17

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

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

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

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


4

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


2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.