나는 주로 이것 과 이것 과 같은 MVVM 기사를 살펴볼 것 입니다.
내 구체적인 질문은 : 모델에서 ViewModel로 모델 변경 사항을 어떻게 전달합니까?
Josh의 기사에서 나는 그가 이것을하는 것을 보지 않는다. ViewModel은 항상 모델에 속성을 요청합니다. Rachel의 예에서 그녀는 모델을 구현하고 모델 INotifyPropertyChanged
에서 이벤트를 발생 시키지만 뷰 자체에서 소비하기위한 것입니다 (그녀가이 작업을 수행하는 이유에 대한 자세한 내용은 기사 / 코드 참조).
모델이 ViewModel에 모델 속성의 변경 사항을 알리는 예제는 어디에도 없습니다. 이로 인해 어떤 이유로 든 완료되지 않았을까 걱정됩니다. 모델의 변경 사항을 ViewModel에 경고하는 패턴이 있습니까? (1) 각 모델에 대해 하나 이상의 ViewModel이 있고 (2) ViewModel이 하나만 있어도 모델에 대한 일부 작업으로 인해 다른 속성이 변경 될 수 있으므로 필요합니다.
"왜 그렇게 하시겠습니까?"라는 형식의 답변 / 댓글이있을 수 있습니다. 여기에 내 프로그램에 대한 설명이 있습니다. 저는 MVVM을 처음 사용하므로 전체 디자인이 잘못되었을 수 있습니다. 간단히 설명하겠습니다.
나는 "고객"이나 "제품"수업보다 더 흥미로운 것을 (적어도 나에게는!) 프로그래밍하고있다. BlackJack을 프로그래밍하고 있습니다.
뒤에 코드가없고 ViewModel의 속성 및 명령에 대한 바인딩에만 의존하는 View가 있습니다 (Josh Smith의 기사 참조).
좋든 나쁘 든, 나는 모델이 PlayingCard
, 같은 클래스 Deck
뿐만 아니라 BlackJackGame
전체 게임의 상태를 유지 하는 클래스를 포함해야한다는 태도를 취했고, 플레이어가 언제 파산했는지, 딜러가 카드를 뽑아야 하는지를 알고 있습니다. 플레이어와 딜러의 현재 점수는 무엇입니까 (21, 21 미만, 버스트 등).
에서 BlackJackGame
나는 "DrawCard"와 같은 방법을 노출하고 나에게 발생한 카드는 다음과 같은 속성을 그려 때 CardScore
, 그리고 IsBust
업데이트해야하고이 새로운 값은 뷰 모델에 전달. 아마도 잘못된 생각일까요?
ViewModel이 DrawCard()
메서드를 호출 한 태도를 취할 수 있으므로 업데이트 된 점수를 요청하고 그가 파산되었는지 여부를 알아 내야합니다. 의견?
내 ViewModel에는 카드 게임의 실제 이미지 (정장, 순위 기반)를 가져 와서보기에 사용할 수 있도록 만드는 논리가 있습니다. 모델은 이것에 관심이 없어야합니다 (아마 다른 ViewModel은 카드 이미지 대신 숫자를 사용합니다). 물론 어떤 사람들은 Model이 BlackJack 게임의 개념을 가져서는 안되며 ViewModel에서 처리해야한다고 말할 것입니다.
OnBust
있으며 VM은이를 구독 할 수 있습니다. IEA 접근 방식도 사용할 수 있다고 생각합니다.