Интернет магазин китайских планшетных компьютеров



Компьютеры - ActiveRecord

28 апреля 2011





ActiveRecord — паттерн, описанный Мартином Фаулером в книге «Patterns of Enterprise Application Architecture». AR является популярным способом доступа к данным реляционных баз данных в объектно-ориентированном программировании.

Общий принцип работы Active Record

Пусть существует таблица в базе данных. Для данной таблицы создаётся специальный класс AR, являющийся отражением таблицы, таким образом, что:

  • каждый экземпляр данного класса соответствует одной записи таблицы;
  • при создании нового экземпляра класса в таблицу добавляется новая запись;
  • при чтении полей объекта считываются соответствующие значения записи таблицы баз данных;
  • при изменении какого-либо объекта изменяется соответствующая ему запись.

Реализация

Реализация концепции AR существует во многих фреймворках для различных языков программирования. Например если в базе данных есть таблица parts с полями name и price, и шаблон Active Record реализован в классе Part, то следующий псевдокод:

part = new Part
part.name = "Sample part"
part.price = 123.45
part.save

создаст новую запись в таблице parts с данными значениями, и будет примерно соответствовать SQL команде

INSERT INTO parts  VALUES ;

С другой стороны, класс может быть использован для запросов к базе данных:

b = Part.find_first

Этот код создаст новый экземпляр класса Part, основанный на данных первой найденой записи в таблице parts у которой поле name равно "gearbox".

Команда SQL может быть подобна одной из показанных ниже, в зависимости от реализации SQL в конкретной базе данных:

SELECT * FROM parts WHERE name = 'gearbox' LIMIT 1; -- MySQL or PostgreSQL

или

SELECT * FROM parts WHERE name = 'gearbox' AND rownum < 2; -- Oracle

или

SELECT TOP 1 * FROM parts WHERE name = 'gearbox'; -- Microsoft SQL Server

Примеры реализации: Yii, Codeigniter и Kohana для PHP.

Хороший пример реализации данного паттерна на языке программирования ruby — ActiveRecord.



Просмотров: 1184


<<< Шаблон проектирования
Fluent interface >>>