Какова цель Active Records? - PullRequest
       25

Какова цель Active Records?

12 голосов
/ 10 сентября 2009

Я работаю с CodeIgniter и впервые столкнулся с Active Records. Сначала я отклонил это как кое-что для людей, которые действительно не знают, как написать SQL. Теперь я понимаю, что мой анализ был ошибочным, и Active Records довольно заметны, особенно в Rails.

Но для чего нужны активные записи? Это абстрагироваться от разных индивидуальностей СУРБД? Если так, то я думал, что это не то, для чего предназначен SQL. Кроме того, что является лучшей практикой, я должен использовать их?

Заранее спасибо

Ответы [ 5 ]

9 голосов
/ 10 сентября 2009

Active Record - это шаблон проектирования для доступа к данным ...

На данный момент есть два основных шаблона проектирования, с которыми я сталкиваюсь в отношении доступа к данным: ActiveRecord и шаблон репозитория

Активная запись

Ваши объекты содержат методы для сохранения их состояния в БД (или другой механизм сохранения), поэтому:

У вас может быть объект Customer.

Объект Customer будет иметь несколько методов, таких как Customer.Save () ;, Customer.Get (int id); и другие.

Эти методы на самом деле не имеют ничего общего с потребителем в реальном мире. Они действительно касаются инфраструктуры вашего приложения.

Шаблон репозитория

В шаблоне хранилища вашим клиентским объектом будет POCO или тупой объект. У него есть только методы и свойства, которые ему действительно нужны для представления информации о клиенте (такие как имя, адрес электронной почты, заказы в списке и т. Д.)

Когда вы хотите сохранить клиента - вы просто передаете его в свой репозиторий

Repository.Save (MyCustomer).

С шаблоном Active record легко и быстро работать. К сожалению, это загромождает модель вашего домена этими методами, которые на самом деле не имеют ничего общего с Заказчиком. Это немного усложняет поддержание модели вашего домена с течением времени.

Для многих ситуаций очень уместно использовать шаблон активной записи. Например - если я пишу довольно простое приложение, которое, вероятно, не изменится сильно, я бы, вероятно, запустил SubSonic и сгенерировал бы свой DAL Active Record. Я буду кодировать свой бизнес-код в течение 20 минут, и все вещи в БД уже позаботятся.

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

Прошло много времени с тех пор, как я прокрутил свой собственный доступ к данным с помощью ADO.Net, и я не очень рекомендую это сейчас, так как есть так много отличных инструментов доступа к данным.

7 голосов
/ 10 сентября 2009

«Шаблон активной записи» становится основной частью большинства сред программирования. Это упрощает задачу CRUD (создание, обновление, чтение, удаление). Например, вместо того, чтобы писать много SQL-запросов для вставки, обновления и удаления многих общих и простых объектов данных, он позволяет просто назначить значения объекту данных и выполнить команду, например, $ object-> save (), SQL компилируется и выполняется для вас.

Большинство фреймворков также реализуют отношения данных в своих соответствующих моделях Active Record, что может значительно упростить доступ к данным, связанным с вашим объектом. Например, в CodeIgniter, если вы указали, что в категории «есть много» продуктов, после загрузки объекта Category из базы данных вы можете перечислить его дочерние продукты с помощью простой строки кода.

foreach ($category->products as $product) {
  echo $product->name;
}

Еще одним преимуществом Active Record является, как вы говорите, то, что он делает ваш код легко переносимым на разные платформы баз данных (при условии, что используемая вами среда имеет драйвер для выбранной вами базы данных), и хотя это вряд ли кажется важным сейчас, это может иметь большую ценность на более позднем этапе, если ваше приложение станет популярным!

Надеюсь, это помогло. Википедия хорошо описывает Active Record (http://en.wikipedia.org/wiki/Active_record_pattern), и документы CodeIgniter тоже подойдут. Лично я использую KohanaPHP (http://www.kohanaphp.com), который является только PHP5-форком CodeIgniter, и я считаю, что его модели ORM очень полезны!)

3 голосов
/ 10 сентября 2009

Я мог бы дать свое собственное представление об этом шаблоне, но лучший охват Active Record (и многих других) - Шаблоны архитектуры корпоративных приложений . Автор Martin Fowler.

Из главы 10:

Активная запись

Объект, который оборачивает строку в таблица базы данных или представление, инкапсулирует доступ к базе данных и добавляет домен логика на этих данных.

Объект несет как данные, так и поведение. Большая часть этих данных постоянный и должен храниться в база данных. Active Record использует больше всего очевидный подход, поставив доступ к данным логика в доменном объекте. Сюда все люди умеют читать и писать их данные в и из базы данных.

...

Когда его использовать

Active Record - это хорошо выбор для доменной логики, которая не слишком сложный, такой как создает, читает, обновляет и удаляет. Производные и проверки на основе одной записи хорошо работают в этой структуре.

...

Активная запись имеет основной Преимущество простоты. Это легко создавать активные записи, и они Легко понять. Их основной Проблема в том, что они работают хорошо, только если объекты Active Record соответствуют непосредственно к таблицам базы данных: изоморфная схема.

Если ваш бизнес логика сложна, вы скоро захотите использовать прямой объект отношения, коллекции, наследование и пр. Это не легко сопоставить с Active Record и добавление их по частям становится очень грязным. Это то, что приведет вас к использованию данных Mapper вместо

1 голос
/ 21 сентября 2009

Во всяком случае, это облегчает написание запросов. Я считаю, что нормальный синтаксис MySQL подвержен синтаксическим ошибкам (не по вине, кроме моей) и с синтаксисом активной записи CI это редко случается со мной.

Active Record - одна из самых крутых функций в CI IMHO

0 голосов
/ 10 сентября 2009

Active Record - это ORM. Вы ознакомились с техникой сопоставления объектных отношений? Я думаю, что если вы понимаете ORM, вы начнете видеть преимущества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...