Interested Article - ActiveRecord

Active record ( AR ) — шаблон проектирования приложений , описанный Мартином Фаулером в книге («Шаблоны архитектуры корпоративных приложений»). AR является популярным способом доступа к данным реляционных баз данных в объектно-ориентированном программировании .

Схема Active Record — это подход к доступу к данным в базе данных. Таблица базы данных или представление обёрнуты в классы. Таким образом, объектный экземпляр привязан к единственной строке в таблице. После создания объекта новая строка будет добавляться к таблице на сохранение. Любой загруженный объект получает свою информацию от базы данных. Когда объект обновлён, соответствующая строка в таблице также будет обновлена. Класс обёртки реализует методы средства доступа или свойства для каждого столбца в таблице или представлении.

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

Реализации данного шаблона часто нарушают принцип единственной ответственности (SRP), совмещая в одном объекте как представление и внутреннюю логику самого объекта, так и механизмы CRUD , поэтому Active Record может считаться антипаттерном . В других случаях это утверждение спорно, так как сам по себе объект, реализующий ActiveRecord, не содержащий никакой бизнес-логики, а предоставляющий таблицу из базы данных, имеет лишь одну причину для изменения (изменение таблицы), что не противоречит определением принципа SRP .

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

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

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

Реализация

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

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

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

INSERT INTO parts (name, price) VALUES ('Sample part', 123.45);

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

b = Part.find_first("name", "gearbox")

Этот код создаст новый экземпляр класса 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 и Kohana для PHP . Следует отметить фреймворк CodeIgniter , который имеет встроенный класс ActiveRecord, являющийся конструктором запросов к базе данных, но не являющийся примером реализации шаблона Active Record.

См. также

Примечания

  1. 8. — «A good anti-example is the Active Record pattern. This pattern is in contradiction of SRP. A domain entity handles persistence of its information. (Note: There is nothing wrong with using Active Record; I've recently used it on a quick demo site and it worked perfectly) Normally, you would have a controller method/action pass a "hydrated" entity to a method of a repository instance.» Дата обращения: 31 июля 2017. 29 августа 2017 года.
  2. Протько Сергей(fesor). // 31 июля 2017 года.
  3. от 10 февраля 2010 на Wayback Machine 10 февраля 2010 года.

Ссылки

Источник —

Same as ActiveRecord