В программной инженерии шаблон активной записиявляется архитектурным шаблон найден в программном обеспечении, которое хранит данные объекта в памяти в реляционных базах данных. Он был назван Мартином Фаулером в его книге 2003 года «Шаблоны архитектуры корпоративных приложений». Интерфейс объекта, соответствующего этому шаблону, будет включать такие функции, как Insert, Update и Delete, а также свойства, которые более или менее соответствуют столбцам в базовой таблице базы данных.
Шаблон активной записи - это подход к доступу к данным в базе данных. Таблица базы данных или представление обернуто в класс. Таким образом, экземпляр объекта привязан к одной строке в таблице. После создания объекта, при сохранении в таблицу добавляется новая строка. Любой загруженный объект получает информацию из базы данных. Когда объект обновляется, соответствующая строка в таблице также обновляется. Класс-оболочка реализует методы accessor или свойства для каждого столбца в таблице или представлении.
Этот шаблон обычно используется инструментами сохранения объектов и в объектно-реляционном отображении (ORM). Обычно отношения внешнего ключа будут представлены как экземпляр объекта соответствующего типа через свойство.
Реализации концепции можно найти в различных структурах для многих сред программирования. Например, если в базе данных есть таблица parts
со столбцами name
(тип строки) и price
(тип числа), а шаблон Active Record - реализован в классе Part
, псевдокод
part = new Part () part.name = "Sample part" part.price = 123.45 part.save ()
создаст новую строку в таблице parts
с заданными значениями, что примерно эквивалентно команде SQL
INSERT INTO parts (name, price) VALUES (' Часть образца ', 123.45);
И наоборот, класс можно использовать для запроса к базе данных:
b = Part.find_first ("name", "gearbox")
Будет найдена новая деталь Part
объект на основе первой совпадающей строки из таблицы parts
, столбец name
которой имеет значение "gearbox". Используемая команда SQL может быть похожей на следующую, в зависимости от деталей реализации SQL в базе данных:
SELECT * FROM parts WHERE name = 'gearbox' LIMIT 1; - MySQL или PostgreSQL
Из-за связи взаимодействия с базой данных и логики приложения при использовании шаблона активной записи модульное тестирование объекта активной записи без базы данных становится затруднительным. Негативное влияние на тестируемость в шаблоне активной записи можно минимизировать, используя фреймворки имитация или внедрения зависимостей для замены реального уровня данных на моделируемый.
Другая критика шаблона активной записи заключается в том, что также из-за сильной связи взаимодействия с базой данных и логики приложения активный объект записи не следует принципу единой ответственности и разделение функций в отличие от многоуровневой архитектуры, которая должным образом учитывает эти методы. По этой причине шаблон активной записи является лучшим и чаще всего используется в простых приложениях, которые представляют собой все формы поверх данных с функциями CRUD или только как часть архитектуры. Обычно эта часть - доступ к данным, и почему несколько ORM реализуют шаблон активной записи.
Шаблоны на основе записей плохо работают в распределенных системах, особенно там, где параллелизм невозможен (например, в автономном режиме). то есть два обновления могут иметь одно поле, которое является правильным, но только одна из двух записей может выиграть.