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

112

Кто-то предложил использовать 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
Показать ещё 2 комментария
Теги:
orm

9 ответов

247

Введение

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

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

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

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

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

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

  • Java: Hibernate.
  • PHP: Propel или Doctrine (Я предпочитаю последний).
  • Python: ORG Django или SQLAlchemy (Моя любимая библиотека ORM когда-либо).

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

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

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

  • 2
    Как говорится в википедии - в этой статье нет ссылок. Не могли бы вы обновить названия продуктов, чтобы они стали реальными ссылками?
  • 0
    Но почему бы просто не использовать SQL?
Показать ещё 3 комментария
31

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

Конечно.

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

  • Объект - это тот, который вы используете с вашим языком программирования (в этом случае python)

  • Реляционная часть - это система реляционных баз данных (база данных), есть другие типы баз данных, но наиболее популярной является реляционная (вы знаете таблицы, столбцы, pk fk и т.д. например, Oracle MySQL, MS-SQL)

  • И наконец, Сопоставление - это место, где вы соединяете свои объекты с вашими таблицами.

В приложениях, где вы не используете структуру 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 )

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

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

13

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

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

Вот краткое сообщение от Мартина Фаулера (Data Mapper):

Шаблоны карт данных Enterprise Application Architecture

3

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

2

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

1

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

https://www.hibernate.org/

  • 3
    Любопытно, почему ответ с нулевым количеством голосов показан выше, чем более популярный ответ ниже?
  • 0
    @HopeKingi думаю, вы уже разобрались, но в любом случае ... у вас могут быть ответы, отсортированные по умолчанию в "самых старых". Сортировать по «голосам» (что также является значением по умолчанию, если вы не вошли в систему), и рейтинг с наибольшим рейтингом появится вверху
1

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

0

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню