2009-06-12 4 views

답변

8

어떤면에서는 활성 레코드 패턴처럼 느껴질 수 있지만 실제로는 그렇지 않습니다. 기본 예 :

//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(); 

활동 기록은 정말 SQL로 데이터 인터페이스 Linq에 몇 가지 모델 클래스가 다른 경로를 따라 모델을 설명하고 공급하는 하나 개의 클래스를 포함하고 별도의 데이터 인터페이스 (별도로 저장소라고도 함)

추 신 : 활성 레코드 패턴을 사용하는 ORM의 좋은 예를 보려면 Subsonic을 확인하십시오.

+0

+1 예를 들어 제시하면 더 명확합니다 :) –

3

LINQ to SQL 자체는 ActiveRecord 패턴의 구현이 아닙니다. Fowler의 ActiveRecord 패턴을 실제로 구현하면 객체 자체가 데이터베이스에서 상태를 저장하고로드 할 책임이 있습니다. LINQ to SQL Objects를 사용할 때 DataContext는 데이터베이스 검색, 개체 상태 추적 및 이러한 변경 내용을 다시 데이터베이스에 저장하는 작업을 담당합니다.

더 많은 코드에서 LINQ to SQL 클래스를 래핑하면 ActiveRecord 패턴을 실제로 구현할 수 있습니다 (DataContext에서 책임을 지우는 쉬운 방법은 없습니다).

+1

전적으로 맞는지 확실하지 않습니다. 엔티티 개체와 DataContext 공유 책임 - DataContext는 일반 특성 데이터를 SQL로 변환하기위한 상용구 기능을 제공하지만 엔티티 개체는 개체 멤버와 데이터베이스 간의 매핑을 제공합니다. 또한 개체의 상태 *는 개체 내에 저장됩니다. 다시 말하자면 DataContext는 상태를 조정하기위한 일반적인 상용구 기능 만 가지고 있습니다. –

+1

네 말이 맞아. 그러나 요컨데, ActiveRecord 패턴의 진정한 구현에서와 같이, 그 자체로 모든 것을 다루는 객체보다는 책임이 여전히 공유되어 있습니다. –

+0

linq to sql은 '테이블 당 하나의 클래스'매핑을 제공합니까? 이것이 ActiveRecord의 특징입니다. 도메인 주도 디자인 (Domain Driven Design)과 같은 다른 OO 패턴에서 멀어집니다. –

2

LINQ to SQL은 Active Record의 구현이 아니므로 엔터티가 자체적 인 지속성 (즉, 지속성 인식)을 완전히 관리해야 함을 의미합니다. LINQ to SQL의 실제 구현은 Unit of Work입니다. 작업 단위는 일종의 레지스트리 또는 컨텍스트가 암시 적 또는 명시 적으로 엔티티의 상태를 추적하여 엔티티가 지속성 메커니즘 (예 : 지속성 감지기)을 완전히 인식 할 수 있음을 의미합니다.

작업 단위 (Unit of of Work)는을 유지 관리하고 separation of concerns을 유지 관리하는 데 도움이되는 POCO (plain old clr object)라는 프로그래밍 스타일을 지원합니다. 이 두 가지 원칙이 충족되면 소프트웨어를 유지 관리하기가 더 쉽습니다. 액티브 레코드 (Active Record)는 실제로 두 주체 모두를 무분별하게하여 더 밀접하게 결합 된 소프트웨어로 유지 보수하기가 더 어려워 질 수 있습니다.

+0

@jrista 흥미로운 ... – GONeale

관련 문제