2011-07-26 2 views
3

MVVM을 사용하여 WPF 응용 프로그램을 작성할 때 WCF 서비스를 사용하여 응용 프로그램 데이터베이스에서 관련 데이터를 제공하는 방법이 필요합니다.MVVM 디자인 패턴을 사용하는 WPF 응용 프로그램에서 모델로 WCF 서비스 사용

예를 들어, 시스템에 작업 목록이 있으면 SQL 데이터베이스에 저장됩니다. 웹 서비스에 메서드를 추가하여 데이터베이스에서 모든 작업을 검색 할 수 있습니다.

나는 그 때 나는이 부동산에 내보기에 컨트롤을 바인딩 것 뷰 모델에서이 메서드를 호출하고

public List<Task> Tasks { get; set; } 

에 결과를 저장할 수 있습니다.

작업 속성이 변경되면 내보기가 업데이트되도록 이미 준비가되었습니다 (위의 예제를 단순하게 유지하지 않았습니다).

제 질문은 다른 작업자가 데이터베이스에 새 작업을 추가 할 때 ViewModel의 작업 속성을 어떻게 업데이트합니까?

새 작업을 찾기 위해 매 x 분마다 데이터베이스를 폴링해야합니까 (WCF 서비스의 메서드를 통해)?

아니면 데이터베이스에 작업을 추가 할 때 Tasks 속성을 업데이트 할 수 있습니까?

답변

1

이 작업을 수행하려면 어떤 종류의 폴링을 수행해야합니다. 모든 변경 사항이 WPF 앱의 메모리에서 발생하기 때문에 ViewModel의 데이터에 대한 변경 사항이 바인딩을 통해 직접 업데이트됩니다. 데이터베이스에 대한 변경 사항은 데이터베이스에서만 알 수 있습니다.

주어진 시간 이후에 추가 된 모든 작업을 반환하는 DateTime을 사용하는 메서드를 WCF 서비스에 추가 할 수 있습니다. 그런 다음 사용 시나리오 및 예상 데이터 업데이트 속도에 적합한 빈도로 ViewModel에서 해당 메서드를 호출합니다. 이 시점에서 추가 된 모든 뉴스 작업이보기에 반영되어야합니다.

4

Publish Subscribe Framework for WCF Services을 사용하여 구현할 수 있습니다. 이렇게하면 WPF 응용 프로그램이 WCF 서버의 업데이트를 구독 할 수 있습니다. 그런 다음 서버는 새 데이터를 사용할 수있을 때 WPF 응용 프로그램에서 제공하는 WCF Services를 호출합니다. 그런 다음 새 데이터로 뷰 모델을 업데이트 할 수 있습니다. WCF 서비스가 데이터베이스에 대한 상점도 제어하는 ​​경우 변경 사항을 간단히 파악하고 구독 한 WPF 클라이언트에 알림을 보낼 수 있습니다.

0

앱에 따라 CQRS approach을 사용할 수 있습니다. 앱이 간단한 CRUD라면 가치가 없을 것입니다. 그러나 더 복잡한 도메인 모델을 만들거나 상당한 확장 성을 찾고 있다면 조사 할 가치가 있습니다. 기본적으로 CQRS는 쿼리와 명령을 구분합니다. 시나리오에서는 WCF를 거치지 않고 클라이언트가 직접 거기에서 가져 오는 실제 ViewModel을 DB에 저장할 수 있습니다. 클라이언트가 필요에 따라 동적으로 새로 고침 할 수 있도록 도메인 이벤트에 가입하게 할 수도 있습니다.

관련 문제