Какова цель активных записей?
Я занимаюсь 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, вы начнете видеть преимущества.