2010-12-28 5 views
2

MVVM 패턴을 사용하는 클라이언트/서버 (WPF/WCF) 응용 프로그램에서 작업하고 있습니다.서비스를 통해 저장하는 경우 모델 일관성을 유지하는 방법은 무엇입니까?

ViewModel의 속성은 모델의 속성에 바인딩되므로 모델을 변경하면 변경 내용이 즉시보기로 전파됩니다.

새로 고침을 클릭하면 서버의 새/변경된 데이터가 모델로 병합되므로 새로 고침 메커니즘이 잘 작동합니다.

사용자 편집 및 저장 속성을 어떻게 처리합니까?

  • 사용자는
  • 변경이 성공하면 서버
  • 로 전송됩니다 "저장"
  • 사용자가 클릭 텍스트 상자의 값을 수정

    1. 사용자의 클릭을 "편집"여기에 내가 어떻게 할 것입니다 , 서버가 모델로 병합 된 업데이트 된 항목을 반환하고 UI가 업데이트됩니다.
    2. 성공하지 못하면 서버에서 오류를 반환하고 모델이 업데이트되지 않습니다.

    MVVM을 사용함으로써, 모델은 (단계 5 & 6 중복 제작) 상기 단계 (3)에서 갱신되는 것, 그리고 서버에서 오류가 발생하면, 클라이언트에서 데이터 서버와 일치하게된다.

    이 상황을 처리하는 모범 사례가 있습니까?

  • +1

    시나리오에서 클라이언트가 아무 것도하지 않고도 서버의 데이터가 특정 클라이언트와 동기화되지 않을 수 있습니까? 앞으로도 가능할 것인가? 내가 묻는 이유는 사용자가 앱을 다시 시작하거나 수동으로 새로 고침하지 않아도되는 동기화 전략이 필요할 수도 있기 때문입니다. 이런 문제는 그 전략에 깔끔하게 맞을 것입니다. 좋은 때마다 저장하기 만하면됩니다. –

    +0

    예 - 다중 사용자 앱이지만 사용자가 항목을 볼 때마다 새로 고침이 발생하여 클라이언트가 최신 상태가됩니다. 당신이 제안하는 것이 합리적이지만 사용자가 Save (저장)를 클릭 할 때 서버가 다운되면 어떻게됩니까? 원래 값을 복원하고 싶습니다 (오프라인 모드로 전환 할 수도 있음). –

    +0

    문제의 일부는 웹 서비스 * 모델입니다. 원격 사본과 로컬 사본은 모두 같은 것을 표현한 것입니다. 모델을 원격으로 업데이트 할 수없는 경우 로컬에서 모델을 업데이트해야하며 동기화되지 않은 상태에 대처할 수 있도록해야합니다. "새로 고침은 사용자가 항목을 볼 때마다 발생합니다". 그들이 그것을 보는 동안 업데이트되면 어떨까요? 이 경우 대처 방법을 알아야합니다. 다른 사용자의 변경 사항을 우연히 취소하지 않도록하려면 대화 상자를 열어두기 만하면됩니다. –

    답변

    0

    해결 방법은 두 번째 개체 집합 인 ModelUpdates를 만드는 것입니다.

    을 클릭하면 ModelUpdate 개체 (Model 개체와 동일한 속성)가 인스턴스화되고 DataContext가 해당 개체로 전환됩니다.

    을 클릭하면 ModelUpdate 개체의 세부 정보가 서비스로 전송됩니다.서비스는 업데이트 된 객체에 대한 세부 정보로 응답 한 다음 모델 저장소에 병합됩니다.

    즉, 모델은 성공적으로 저장된 데이터로만 업데이트됩니다. 개체가 잘못 저장된 경우 데이터베이스 버전이 클라이언트로 다시 전송됩니다. 저장 중에 오류가 발생하면 데이터베이스 버전이 클라이언트로 다시 전송됩니다. 서버를 사용할 수 없으면 클라이언트는 사전 편집 버전을 유지합니다.

    -1

    동기 포스트 방법을 사용해야한다고 생각합니다.
    이렇게하면 오류가 발생하면 모델과 뷰 측면이 동일합니다. 또한 저장된 데이터가 복원 될 때까지 뷰가 업데이트되지 않습니다. 간단한 단어에서

    는 :

    1) 사용자는
    2) 사용자가 변경
    3) 사용자가 클릭
    3.1) 응용 프로그램 모델
    변경 저장 모델
    3.2)에 데이터를 uid에 저장하게 편집 클릭 3.3) 모델이 변경된 데이터를 반환합니다.
    4) 변경된 데이터 (변경된 데이터) 또는 실패한 메시지가있는 변경 내용을 봅니다.

    +0

    감사합니다. @Erik,하지만 당신의 솔루션에는 제가 피하려고하는 문제가 여전히 남아 있습니다 - 저장에 실패하면 모델에 불량이 포함됩니다 데이터. –

    0

    우리가 처리 한 방식으로 원본 데이터의 사본이 저장되었습니다. 업데이트가 실패 할 때마다 원래 데이터가 뷰에 복원되었습니다.

    +0

    프로그래머가 항상 오류 처리에서 오류를 설명하는 경우이 방법이 유용합니다. 저는 개별 프로그래머들에게 부담을주지 않는 아키텍처 솔루션을 찾고 있습니다. –

    관련 문제