В программной инженерии , то активный шаблон записи считается архитектурной картиной некоторых людьми и в качестве анти-паттерна некоторых других недавно. [1] [2] Он присутствует в программном обеспечении, которое хранит данные объекта в памяти в реляционных базах данных . Он был назван Мартином Фаулером в его книге 2003 года « Шаблоны архитектуры корпоративных приложений» . [3] Интерфейс объекта, соответствующего этому шаблону, будет включать такие функции, как Insert, Update и Delete, а также свойства, которые более или менее соответствуют столбцам в базовой таблице базы данных.
Шаблон активной записи - это подход к доступу к данным в базе данных . Таблицы баз данных или вид заворачивают в класс . Таким образом, экземпляр объекта привязывается к одной строке в таблице. После создания объекта при сохранении в таблицу добавляется новая строка. Любой загруженный объект получает информацию из базы данных. Когда объект обновляется, соответствующая строка в таблице также обновляется. Класс-оболочка реализует методы или свойства средств доступа для каждого столбца в таблице или представлении.
Этот шаблон обычно используется инструментами сохранения объектов и объектно-реляционным отображением (ORM). Обычно отношения внешнего ключа будут представлены как экземпляр объекта соответствующего типа через свойство.
Реализации [ править ]
Реализации концепции можно найти в различных структурах для многих сред программирования. Например, если parts
в базе данных есть таблица со столбцами name
(строковый тип) и price
(числовой тип) и в классе реализован шаблон Active Record Part
, псевдокод
part = новая деталь ()part.name = "Образец детали"part.price = 123,45part.save ()
создаст новую строку в parts
таблице с заданными значениями, и примерно эквивалентно SQL команды
INSERT INTO части ( наименование , цена ) VALUES ( 'Sample часть' , 123 . 45 );
И наоборот, класс можно использовать для запроса базы данных:
b = Part.find_first ("имя", "коробка передач")
Будет найден новый Part
объект на основе первой совпадающей строки из parts
таблицы, name
столбец которой имеет значение «gearbox». Используемая команда SQL может быть похожей на следующую, в зависимости от деталей реализации SQL в базе данных:
ВЫБРАТЬ * ИЗ частей WHERE name = 'gearbox' LIMIT 1 ; - MySQL или PostgreSQL
Критика [ править ]
Тестируемость [ править ]
Из-за связи взаимодействия с базой данных и логики приложения при использовании шаблона активной записи модульное тестирование объекта активной записи без базы данных становится трудным. Эти негативные эффекты на контролируемости активного шаблона записи могут быть уменьшены с помощью насмешливых или инъекционных зависимостей рамок для замены реального уровня данных с моделируемым один.
Принцип единой ответственности и разделение ответственности [ править ]
Другая критика шаблона активной записи заключается в том, что также из-за сильной связи взаимодействия с базой данных и логики приложения активный объект записи не следует принципу единой ответственности и разделения задач, в отличие от многоуровневой архитектуры, которая должным образом учитывает эти практики. [ необходима цитата ] [ требуется пояснение ] Из-за этого шаблон активной записи является лучшим и чаще всего используется в простых приложениях, которые представляют собой все формы поверх данных с функциональностью CRUD или только как часть архитектуры. [ необходима цитата ] Обычно эта часть - доступ к данным, и почему несколько ORM реализуют шаблон активной записи.
Распределенные системы [ править ]
Шаблоны на основе записей плохо работают в распределенных системах, особенно там, где параллелизм невозможен (например, в автономном режиме). т.е. два обновления могут иметь одно правильное поле, но только одна из двух записей может выиграть. [ требуется разъяснение ]
См. Также [ править ]
Ссылки [ править ]
- ^ Антипаттерн: модель - активная запись
- ^ ORM антипаттерны - Часть 1: Active Record
- ^ Фаулер, Мартин (2003). Паттерны архитектуры корпоративных приложений . Эддисон-Уэсли. ISBN 978-0-321-12742-6.