2010-05-18 4 views
1

모두가 뷰 모델로 모델을 래핑하는 것에 대해 이야기합니다. 지금까지 괜찮아.MVVM : ViewModel을 모델로 변환하려면 어떻게해야합니까?

그러나 내 모델을 유지하려면 ViewModel을 모델로 변환하려면 어떻게해야합니까?

ViewModel의 모든 속성을 새 Model 객체로 읽는 것은 매우 번거로운 것처럼 보입니다.

더 좋은 방법이 있습니까?

답변

1

저는 현재 이전 winforms 앱을 wpf mvvm 응용 프로그램으로 변환하고 있으며 모델의 실제 인스턴스를 가리키는 내 viewmodel에 속성을 제공하고 있습니다.

내 관점에서보기 모델에서 모델의 복제본을 만드는 것이 의미가 없으며 MVVM 커뮤니티가이를 말하는 것은 아닙니다.

엔티티 프레임 워크가 데이터 바인딩을 지원하는 속성을 가지고 있기 때문에 엔티티 프레임 워크 나 다른 데이터베이스 orm을 사용하기 시작하면 특히 이해가되지 않습니다. 또한 데이터베이스를 변경하기 시작하면 모델과 뷰 모델을 업데이트해야합니다.

편집 : 당신은 INotifyCollectionChanged를 지원하지 않는 EF에 맞아,하지만 내가 아는 한, 그것은에서 INotifyPropertyChanged를 지원하지 않습니다, 그리고 그것의 모습에서, 마이크로 소프트는 향후 릴리스에서 INotifyCollectionChanged를 구현하는 생각 .

MVVM에 대해 옳고 그른 방법이 있다고 생각하지 않습니다. 웹의 모든 다른 '권위'가 어떻게 작동해야하는지에 대한 자체 해석이 있다고 생각합니다.

+0

대답 한 가 복제 ... ... 매우 모호 : 사샤 이발사 WPF (제자)는 도메인 고객 그의 CustomerModel을 복제하고, 그의 빈대 프레임 워크 샘플 응용 프로그램을 확인 - 나는, EF 언급하지 않은 있지만, EF 엔티티는 INotifyCollectionChanged를 지원하지 않습니다. – msfanboy

+0

"... 데이터베이스를 변경하면 모델을 업데이트해야하고 viewmodel ...." 은 모델이 viewmodel에 위임되므로 true가 아닙니다. 샘플 CustomerViewModel.cs는 : 공개 문자열 FIRSTNAME 는 { 는 { _customerObject.FirstName = 값을 설정; } } 는 modelObject는 뷰 모델의 ctor; - 주입 되나 이것은 ViewModels로 집계 모델 하 문제가 발생하지만 그게 다른 이야기. – msfanboy

0

사용자 인터페이스에 대해 ViewModel이 만들어진다는 아이디어입니다. 즉, 하나의 WPF 양식에는 하나의 ViewModel이 있지만 ViewModel에는 실제로 여러 모델 (고객, 주문 등)이 사용될 수 있습니다. 양식이 하나의 모델 만 처리하는 경우 1 대 1 매핑에 가까워 질 것입니다.

+0

내 질문을 읽으셨습니까? – msfanboy

0

필요할 때만 모델을 뷰 모델로 래핑하십시오. 그렇지 않으면 뷰가 모델의 특성에 직접 바인딩됩니다. 예 : 모델 1 : 직원 목록 (직원은 이름과 부서가 있음) 모델 2 : 부서 목록. 보기 : 직원 및 부서 목록 표시. 사용자가 부서를 선택하면 직원 목록이 필터링됩니다. ViewModel : 현재 선택된 부서 속성과 필터링 된 직원 목록을 제공합니다.

뷰는 뷰리스트 모델에 대해 부서 목록을 직접 모델링하지만 현재 선택된 부서 및 필터링 된 직원 목록을 모델링합니다. Viewmodel은 선택한 부서에 따라 직원 목록을 필터링합니다.

+0

"... 그렇지 않으면 뷰가 모델의 속성에 직접 바인딩됩니다 ...." => MVVM 패턴을 사용하지 않는 것이 좋습니다! – msfanboy

+0

MVVM을 엄격히 따르는 것보다 더 나은 방법을 요청했다고 생각했습니다. 순수 MVVM은 모델과 VM간에 상태를 복사하는 데 많은 코드가 필요하기 때문에 코드 유지 관리에 문제가 발생합니다. 또한 MVVM 애플 리케이션은 데이터가 중복되기 때문에 높은 메모리 소비를 갖습니다. –

+0

내가 지금 한 일을 잘 알지? 실제로 저는 3 개의 통합 뷰 모델과 MVVM을 사용하여 3 차원 마스터 세부 정보를 관리했기 때문에 학습을위한 것이지만 실용적인 목적이 아니라는 것을 깨달았습니다. 많은 오버 헤드와 모든 복제본 속성 및 종종 내 ... 내가 어떻게 mvvm을 따라하려고하면 코드 흐름을 말할 수 있습니다 ... 이름이 있습니다. 이제는 ViewModel을 UserControls datacontext에 바인드했습니다. 3 개의 집계 된 엔티티가 포함되어 있습니다. 뷰 모델이 아닌 많은 시간을 저장하는/뒤로 속성과 목록을 저장합니다 ... – msfanboy

0

당신이 속성을 복제하지 않으려면, 내가 일반 모델과 Django>=1.4 proxy models 사용하는 것이 좋을 것 : 데이터와

  • 사용 프록시 모델 당신이 사용하는 것이 지속에 대한

    • 사용하는 일반 모델 보기 모델.

    프록시 모델은 쉽게 원래 모델을 상속하고 모델 Meta, 예를 들어,에 proxy = True을 추가하여 정의된다

    class MyProxyModel(MyModel): 
        class Meta(MyModel.Meta): 
         proxy = True 
    
        # Add here the desired view model methods... 
    

    참고 프록시 모델은 models.py에 정의 할 필요가 없습니다 - 나는 종종 관리자 사이트에 프록시 모델을 사용하고 admin.py에서 그들을 정의합니다.

    호프가 도움이되었거나 나 같은 다른 후발 친구가이 기능을 사용할 수 있기를 바랍니다.

  • 관련 문제