저는 DDD, 작업 단위, 도메인 서비스, 응용 프로그램 서비스 등에 관한 모든 정보에 다소 압도되어 있습니다. 나는 지속성 - 무지한 도메인 모델이 궁극적으로 어떻게 지속되는지, 특히 문맥에서 작업 단위 및 Entity Framework에 대해 설명합니다. 이제 내가 내 지속성 무지 도메인 모델 (내 건축 양파의 핵심)을 유지하려고하고 주문서 집계 루트를 가지고 있다고 가정 해 봅시다 :Entity Framework를 사용하여 DDD에서 지속성 및 작업 단위를 어떻게 처리합니까?
public class Order : EntityBase
{
public int Id { get; private set; }
public int MarketplaceId { get; private set; }
public int CustomerId {get; set;}
public List<OrderItem> Items { get; private set; }
public List<OrderComment> Comments { get; private set; }
public void AddItem(OrderItem item) { /**add item**/ }
public void AddComment(OrderComment comment) { /**add comment**/ }
public override bool Validate() { /**validate**/ }
public void Cancel() { /**cancel**/ }
}
의 내가에 속성을 업데이트하는 프로세스를 가정 해 봅시다 주문 엔터티. 예를 들어 주문과 연결된 CustomerId가 변경됩니다.
나는이 같은 기능 (외부 층에서) 구현을 것이다, 내 도메인 층에 IOrderRepository 있습니다Order GetOrder(int orderId)
{
//get entity framework order, items, etc.
//map to domain-layer order and return domain-layer order
}
void UpdateOrder(Order order)
{
//get ENTITY FRAMEWORK order, order items, order comments, etc.
//take DOMAIN order (passed in to this function), and update EF items fetched above
//use a single EF unit of work to commit these changes
}
내 접근 방식에 문제가있다. UpdateOrder 함수는 작은 변화로 인해 무거워 보입니다. 내 저장소가 persistence-ignorant 도메인 모델의 어떤 항목을 변경했는지 알지 못하는 경우에도이를 수행해야합니다. 별도의 저장소 기능에서 모든 유형의 업데이트를 처리해야합니까? UpdateMarketplace (int marketplaceId), UpdateCustomer (int customerId)?
내가 입력 할 때, 나는 또한 궁금해 할 것입니다 ... 아마도 내가 가지고있는 방법이 너무 무겁지 않을까요? 하나의 속성을 변경하면 위의 모든 작업을 수행하더라도 Entity Framework에서 할당되는 값이 동일하고 하나의 db 열 업데이트 만 SQL에 보내지는 것을 인식하게됩니까?
주문 도메인 모델 (가져 오기가 간단 함)을 사용하고 범위가 제한 될 수있는 일부 작업이나 연산을 수행 한 다음 Entity Framework를 사용하여 모델을 유지할 수 있습니까?
입력 해 주셔서 감사합니다. 이것이 더 활발한 기록 패턴이 아니겠습니까? 내 도메인 객체가 데이터베이스 객체와 1 : 1 속성 관계를 갖고 있지 않은 경우에는 어떻게해야합니까? 엔티티를 직접 매핑하지 않으면 1 : 1 관계로 커밋하고 어떤 의미에서는 내 도메인 모델을 지속성과 결합하게됩니까? – Josh
코드 우선 접근법을 사용할 때 매핑이 꽤 유연하기 때문에 1 : 1 관계로 완전히 커밋하지 않을 것입니다. 하지만 문제가 발생하여 1 : 1 매핑을하는 것처럼 느껴질 수도 있습니다. 당신은 여전히 다른 레이어를 수행하고 둘 사이에서 변환 할 수 있지만 자동 변경 추적을 일부 풀어 놓습니다. –
도메인 개체에서 데이터 개체로 변환 할 때 EF를 사용하면 첨부를 호출하여 컨텍스트에 연결해야하며 상태를 수정 됨으로 설정해야합니다. SaveChanges를 호출 할 때 저장됩니다. 이 [link] (http://msdn.microsoft.com/en-US/data/jj592676)를 참조하십시오. 내 게시물에 링크 된 UOW/저장소 패턴을 참조하십시오. 여기에는 이러한 종류의 작업을위한 메서드도 포함되어 있습니다. –