2009-09-10 5 views
10

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

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

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

ответ

5

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

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

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

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

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

8

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

В настоящее время существует два основных шаблонов проектирования я, кажется, попадались в отношении доступа к данным: ActiveRecord и Repository Pattern

Active Record

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

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

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

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

Repository Pattern

В хранилище шаблона, ваш объект клиента будет ПОК или тупым предметом. Она имеет только методы и свойства, которые он действительно должен представлять клиента (такие вещи, как имя, адрес электронной почты, списка заказов и т.д.)

Если вы хотите, чтобы упорствовать клиента - вы просто передать его в хранилище

Репозиторий. Сохранение (MyCustomer).

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

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

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

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

+0

+1. Очень хорошее объяснение –

0

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

+0

Были ORM, у которых в названии есть «Активная запись», но «Активная запись» является правильной моделью проектирования корпоративного приложения. Посмотрите в книге Мартина Фаулера в моем ответе, это отличная книга для расчистки этих вещей. – Ash

+0

Привет, Ash, спасибо за это - возьмите прочитанный ... – JonB

2

Я мог бы дать свой собственный взгляд на этот образец, но лучший охват Active Record (и многих других) - это Patterns of Enterprise Application Architecture от Martin Fowler.

Из главы 10:

Active Record

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

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

...

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

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

...

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

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

1

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

Активная запись является одной из самых крутых функций в CI IMHO

Смежные вопросы