2011-02-10 1 views
0

새내기 여기에 미안, 이것이 명백한 질문이고, 나의 영어를 유감스럽게 생각한다면. Google에 문의했지만 내 질문에 대한 답변을 찾지 못했습니다.여러 개의 ViewModels에서 동일한 도메인 객체를 요청합니다. 동일한/다른 인스턴스를 제공해야합니까?

Visual Studio, Autofac, EF CTP5 코드 만 사용하고 있습니다 (나중에 EF CTP5는 IoC 컨테이너를 지원하지 않으므로 HHibernate로 전환 함). MVVM, DI, DDD 패턴을 사용하려고합니다.

내 질문입니다 : 여러 ViewModels 리포지토리에서 동일한 도메인 개체를 요청할 때 동일한 인스턴스를 제공해야합니까 또는 각 요청에 대해 새 인스턴스를 만들어야합니까?

public class PersonRepository 
{ 
    public Person GetById(int id) 
    { 
     using (var dbContext = new MainDbContext()) 
     { 
      return dbContext.Persons.Where(x => x.Id == id); 
     } 
    } 
} 

그리고 어떤 ViewModle는 도메인 객체의 인스턴스를 수정 한 후

, 나는 방법을 찾아야 할 것이다 : 나는 각 요청에 대해 새 인스턴스를 만들 경우

, 나는 내가 다음처럼 작성할 것 같아요 데이터 무결성을 보장하기 위해 다른 모든 Viwe 모델에 인스턴스를 업데이트하도록 알릴 수 있습니다. 나는 모든 요청에 ​​대해 도메인 오브젝트의 동일한 인스턴스를주는 경우에

, 그럼 내가 이런 걸 쓸 것 같아요

public class PersonRepository 
{ 
    List<Person> _cache = new List<Person>(); 
    public Person GetById(int id) 
    { 
     var person = getFromCache(id); 
     if (person == null) 
     { 
      person = getFromDatabase(id); 
      _cache.Add(person); 
     } 
     return person; 
    } 
} 

을 그리고도에서 인스턴스를 제거 할 수있는 방법을 찾을 필요 어느 쪽의 ViewModel에서도 필요없는 캐쉬 (또는 메모리의 누설을 피하기 (위해) 때문에, cache의 weakreference를 사용)

어떤 방법으로 가야합니까? 더 나은 옵션이 있습니까?

감사합니다!

편집 : 더 자세한 설명을 위해 내용이 변경되었습니다.

(내 영어 죄송합니다) 업데이트 : 나는이에 대한 몇 가지 조사를 한 후

, 나는이 질문이 너무 혼란 실현, 그래서 여기에 새로운 질문을 게시 : Multiple ViewModels modify the same domain object

답변

0

여러 사용자로 인해 발생하는 여러 인스턴스에 대해 생각하는 경우 하나의 뷰 모델 인스턴스를 인스턴스화하고 ORM 및 데이터베이스를 사용하여이를 수행하는 방법에 대한 핸들을 얻으려는 경우가 있습니다 (optimistic v pessimistic locking 이해). 나는 개인적으로 NHibernate를 사용하지만, information on how EF supports this을 갖는 링크가있다. 또한 낙관적 인 잠금을 선호하는 것이 좋습니다.

유스 케이스가있는 동일한 도메인 객체 (즉, 사람)의 여러보기에 대해 이야기하는 경우 동일한보기 모델의 여러 인스턴스를 사용할 수는 있지만 다른보기 모델을 원할 가능성이 높습니다. 어느 쪽이든, 여기서의 동기화는 데이터베이스의 책임이 아닙니다. 여기에 good link that explores various possibilities with a bias towards an event aggregator이 있습니다.

HTH,
Berryl

P.S. 저장소에서 캐싱하는 것을 보았습니다. 이것은 훌륭한 고려 사항이지만 ORM (즉, EF, NHibernate)에 캐시 관리를 맡기는 것이 가장 좋으며 필요하다면 언제든지 미세 조정하는 방법을 이해해야합니다. 예를 들어, NHib의 기본 동작은 일반적인 시나리오에서 지능적으로 적절하게 캐시됩니다.

+0

안녕하세요, 답장과 링크를 보내 주셔서 감사합니다. 지금 언급 한 주제를 연구하겠습니다. –