Я только что исследовал шаблон ActiveRecord и на его основе (http://en.wikipedia.org/wiki/Active_record_pattern), кажется, Linq 2 Sql более или менее реализует это, я ошибаюсь? или что нужно изменить, чтобы он соответствовал шаблону ActiveRecord?
Использует ли LINQ to SQL шаблон ActiveRecord?
Ответы (3)
В некотором смысле это может показаться активным шаблоном записи, но на самом деле это не так. Базовый пример:
//load the entity
var c = myDataContext.Customers.FirstOrDefault(c => c.Id == 1876);
c.Name = "George Armstrong Custer";
// saves the entity
myDataContext.SubmitChanges();
Активная запись
//load the entity
var c = Customer.GetCustomer(9);
c.Name = "Varus";
//save the entity
c.Save();
Активная запись на самом деле включает только один класс, который покрывает модель и предоставляет интерфейс данных. Linq к Sql следует по другому пути, где есть несколько классов модели и отдельный интерфейс данных, иначе известный как репозиторий.
PS: Хороший пример ORM, использующего активный шаблон записи, можно найти в Subsonic.
Сам LINQ to SQL не является реализацией шаблона ActiveRecord. В настоящей реализации паттерна ActiveRecord Фаулера сам объект будет отвечать за сохранение и загрузку своего состояния из базы данных. При использовании объектов LINQ to SQL DataContext отвечает за восстановление базы данных, отслеживание состояния объекта и сохранение этих изменений обратно в базу данных.
Вам будет сложно обернуть эти классы LINQ to SQL в дополнительный код, чтобы сделать его истинной реализацией шаблона ActiveRecord (нет простого способа снять ответственность с DataContext).
LINQ to SQL не является реализацией Active Record, что означает, что объекты полностью ответственны за управление своей персистентностью (например, за сохранение сохраняемости). Фактически LINQ to SQL является реализацией Unit of Work. Единица работы означает, что какой-то реестр или контекст отслеживает состояние сущностей, явно или неявно, позволяя сущностям полностью игнорировать свой механизм сохранения (т. Е. Игнорировать постоянство).
Unit of Work поддерживает стиль программирования под названием POCO (простой старый объект clr), который помогает вам поддерживать разделение проблем и соблюдать принцип единоличной ответственности. Когда эти два принципа соблюдены, ваше программное обеспечение обычно легче поддерживать. Active Record фактически нарушает оба этих принципа, что приводит к созданию более тесно связанного программного обеспечения, которое может быть труднее поддерживать.