Тимофеев, Николай Стагоранович
- 1 year ago
- 0
- 0
Active record ( AR ) — шаблон проектирования приложений , описанный Мартином Фаулером в книге («Шаблоны архитектуры корпоративных приложений»). AR является популярным способом доступа к данным реляционных баз данных в объектно-ориентированном программировании .
Схема Active Record — это подход к доступу к данным в базе данных. Таблица базы данных или представление обёрнуты в классы. Таким образом, объектный экземпляр привязан к единственной строке в таблице. После создания объекта новая строка будет добавляться к таблице на сохранение. Любой загруженный объект получает свою информацию от базы данных. Когда объект обновлён, соответствующая строка в таблице также будет обновлена. Класс обёртки реализует методы средства доступа или свойства для каждого столбца в таблице или представлении.
Этот образец обычно используется объектными инструментами персистентности и в объектно-реляционном отображении ( ORM ). Как правило, отношения внешнего ключа будут представлены как объектный экземпляр надлежащего типа через свойство.
Реализации данного шаблона часто нарушают принцип единственной ответственности (SRP), совмещая в одном объекте как представление и внутреннюю логику самого объекта, так и механизмы CRUD , поэтому Active Record может считаться антипаттерном . В других случаях это утверждение спорно, так как сам по себе объект, реализующий ActiveRecord, не содержащий никакой бизнес-логики, а предоставляющий таблицу из базы данных, имеет лишь одну причину для изменения (изменение таблицы), что не противоречит определением принципа SRP .
Пусть существует таблица в базе данных . Для данной таблицы создаётся специальный класс 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.
|
Это
заготовка статьи
по
информатике
. Помогите Википедии, дополнив её.
|