Что такое 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:
- Java: Hibernate.
- PHP: Propel или Doctrine (я предпочитаю последний).
- Python: Django ORM или SQLAlchemy (моя любимая библиотека ORM).
- C#: NHibernate или Entity Framework
Если вы хотите попробовать библиотеку 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, и имеете довольно простую / мелкую проблему, они могут сэкономить ваше время!-)
Объектная модель связана со следующими тремя концепциями Наследование инкапсуляции данных. Наследование В реляционной модели использовалась базовая концепция отношения или таблицы. Продукты объектно-реляционного отображения (OR mapping) объединяют возможности языка объектного программирования с реляционными базами данных.
Это огромная тема. Поднимите хорошую книгу о гибернации, и она должна подробно объяснить ORM, прежде чем приступить к изучению материала.
DALMP http://code.google.com/p/dalmp/ может быть хорошим вариантом для php/mysql, который в настоящее время поддерживает множество бэкэндов кэша, таких как redis/memcache/apc