내가 나타났습니다 저장소는 일반적으로 다음 중 한 가지 방법으로 구현됩니다 (DDD : 리포지토리는 개체의 메모리 내 컬렉션입니까?
방법 1
void Add(object obj);
void Remove(object obj);
object GetBy(int id);
방법 1 모음집 의미를 가지고 2
void Save(object obj); // Used both for Insert and Update scenarios
void Remove(object obj);
object GetBy(int id);
방법하는 저장소가 어떻게 정의되는지). 우리는 저장소에서 객체를 가져 와서 수정할 수 있습니다. 그러나 우리는 컬렉션을 업데이트하도록 지시하지 않습니다. 이런 방식으로 저장소를 구현하려면 메모리 내 개체에 대한 변경 사항을 유지하기위한 또 다른 메커니즘이 필요합니다. 내가 아는 한, 이것은 Unit of Work를 사용하여 수행됩니다. 그러나 UoW는 시스템에서 트랜잭션 제어가 필요할 때만 필요하다고 주장하는 독자도 있습니다.
방법 2에서는 UoW가 필요하지 않습니다. Save() 메서드를 호출하면 개체가 새로운 개체인지, 개체가 삽입되었거나 수정되어야하며 업데이트되어야하는지 여부가 결정됩니다. 그런 다음 데이터 맵퍼를 사용하여 변경 사항을 데이터베이스에 유지합니다. 이로 인해 삶이 훨씬 쉬워 지지만 모델화 된 저장소에는 수집 의미론이 없습니다. 이 모델에는 DAO 의미론이 있습니다.
저는 이것에 대해 정말로 혼란 스럽습니다. 리포지토리가 개체의 메모리 수집을 모방 한 경우 방법 1에 따라 모델링해야합니다.
이 점에 대해 어떻게 생각하십니까?
MOSH
첫 번째 옵션을 사용하며 매우 만족합니다. 나는 현재 NHibernate를 사용하고 있기 때문에 UoW는 무료로 제공된다. – goenning