Использует ли LINQ to SQL шаблон ActiveRecord? - PullRequest
3 голосов
/ 12 июня 2009

Я только что исследовал шаблон ActiveRecord, и на его основе (http://en.wikipedia.org/wiki/Active_record_pattern), кажется, что Linq 2 Sql более или менее реализует это, я ошибаюсь? Или что нужно изменить, чтобы он соответствовал к шаблону ActiveRecord?

Ответы [ 3 ]

8 голосов
/ 12 июня 2009

В некотором смысле это похоже на активный шаблон записи, но на самом деле это не так. Базовый пример:

//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 .

3 голосов
/ 12 июня 2009

LINQ to SQL сам по себе не является реализацией шаблона ActiveRecord. В истинной реализации шаблона ActiveRecord Фаулера сам объект будет отвечать за сохранение и загрузку своего состояния из базы данных. При использовании LINQ to SQL Objects DataContext отвечает за восстановление базы данных, отслеживание состояния объекта и сохранение этих изменений обратно в базу данных.

Вам будет трудно обернуть эти классы LINQ to SQL в большее количество кода, чтобы сделать его истинной реализацией шаблона ActiveRecord (нет простого способа снять ответственность с DataContext).

2 голосов
/ 12 июня 2009

LINQ to SQL не является реализацией Active Record , что означало бы, что сущности несут полную ответственность за управление своей собственной персистентностью (т. Е. Сохранением осведомленности). На самом деле LINQ to SQL является реализацией Unit of Work . Единица работы означает, что некоторый вид реестра или контекста отслеживает состояние сущностей, как явных, так и неявных, что позволяет сущностям полностью игнорировать свой механизм персистентности (то есть неосведомленность о постоянстве).

Единица работы поддерживает стиль программирования, называемый POCO (обычный старый объект clr), который помогает вам поддерживать разделение интересов и поддерживать принцип единоличной ответственности . Когда эти два принципа соблюдены, ваше программное обеспечение обычно легче поддерживать. Active Record фактически нарушает оба этих принципала, что приводит к более тесно связанному программному обеспечению, которое может быть сложнее поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...