Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Репозиторий.Сохранить(МойКлиент).

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

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

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

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

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

Из главы 10:

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

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

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

...

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

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

...

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top