2011-02-11 3 views
4

ConsumerModel이 있다고합시다. ConsumerModel에는 많은 모델 속성이 있고 하나는 AddressModel의 목록입니다. 이 Address 속성은 ConsumerModel이있는 모든 곳에서 사용되지 않기 때문에 느슨하게로드되기를 원합니다. 이 주소는 소비자 주소를 표시하고 변경할 수있는 AddressViewModel에서만 사용됩니다.모델 또는 ViewModel이 모델 속성의 지연로드를 처리해야합니까?

ConsumerModel 또는 AddressViewModel의 AddressModels을 누가로드 처리합니까?

또는 소비자의 Addreses 목록을 분리하고 AddressViewModel 내에서 별도의 속성으로 처리하는 것과 같은 유형의 제안 된 대체 디자인이 있습니까?

public class ConsumerModel : IModel 
{ 
    private List<AddressModel> _addresses; 

    public List<AddressModel> Addresses 
    { 
     get; 
     set; 
    } 
} 

답변

3

모델에 속합니다. ViewModel 패턴 사용의 요점은 처음부터보기에서 이러한 종류의 결정을 제거하는 것입니다. 이 모델은 모든 데이터 수집, 조직 및 관리를 담당합니다. ViewModel은 모델에 포함 된 내용이 UI에 출력되도록하는 책임을집니다. 이것을 ViewModel에 넣는 것이 좋겠지 만 다음 주에 사양이 변경되면 다른 ViewModel에서 그 주소가 갑자기 필요하면 (이유가 무엇이든) 패턴을 망가 뜨리면 스크램블하여 쪽으로.

+0

왜 모델 라이브러리에 데이터를 가져 오는 WCF 서비스에 대한 참조가 포함되어 있지 않은지 확실하지 않은 부분이 있습니다. ViewModel 라이브러리 만 수행합니다. 모델에 데이터 인스턴스화를 추가하면 해당 라이브러리에 대한 WCF 서비스에 대한 참조를 추가해야합니다. 모델 라이브러리는 WCF 서비스 내에서 사용되기 때문에 의도적으로 WCF 서비스에 대한 참조없이 남아 있습니다.이 참조를 추가하면 순환 참조가 생성됩니다. – Rachel

+0

@Rachel - 저는 항상 데이터 액세스를 위해 세 번째 라이브러리를 사용했습니다. ViewModel에서 참조를 사용하는 대신 DataLibrary (웹 서비스에 대한 액세스를 보유/제어)에 대한 참조를 사용합니다. DataLibrary에는 ViewModel과 Model 모두에 독립적으로 액세스 할 수있는 내 사용자 정의 데이터 액세스 개체가 포함되어 있습니다. –

+0

그래도 실제로는 별도의 데이터 액세스 라이브러리를 사용하고 있지만 문제를 단순화하려고했습니다. 따라서 귀하의 ViewModel과 모델 모두 데이터를 가져올 수있는 액세스 권한이 있습니까? 저장 및 추가/삭제를 위해 데이터 및 VM을 가져 오는 모델? – Rachel

1

Addresses 등록 정보가 ConsumerModel에 속하면 ConsumerModel이이를로드해야합니다. (다른 것들은 캡슐화를 깨뜨리고있다/어떤 종류의 디자인 원리 - 나는 내 용어에 익숙하지 않다 ... 단지 잘못된 기분을 느낀다!)

그러나 주소 목록이 AddressViewModel에서만 사용된다면 어쩌면 속성을 ViewModel로 이동하고로드를 처리하도록하는 경우입니다.

관련 문제