Какова цель активных записей?

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

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

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

Ответ 1

"Активный шаблон записи" становится основной частью большинства программных фреймворков. Он упрощает выполнение задач 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-модели очень полезны!

Ответ 2

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

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

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

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

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

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

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

Шаблон хранилища

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

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

Repository.Save(MyCustomer).

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

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

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

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

Ответ 3

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

Из главы 10:

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

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

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

...

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

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

...

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

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

Ответ 4

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

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

Ответ 5

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