ฉันกำลังจะผ่านบทความ MVVM บางส่วนใหญ่นี้และนี้
คำถามเฉพาะของฉันคือ: ฉันจะสื่อสารการเปลี่ยนแปลงโมเดลจากโมเดลเป็น ViewModel ได้อย่างไร
ในบทความของ Josh ฉันไม่เห็นว่าเขาทำเช่นนี้ ViewModel จะถาม Model สำหรับคุณสมบัติเสมอ ในตัวอย่างของ Rachel เธอมีการนำแบบจำลองมาใช้INotifyPropertyChanged
และหยิบยกเหตุการณ์ขึ้นจากแบบจำลอง แต่มีไว้เพื่อการบริโภคโดยการดูเอง (ดูบทความ / รหัสของเธอสำหรับรายละเอียดเพิ่มเติมว่าเหตุใดเธอจึงทำเช่นนี้)
ฉันไม่เห็นตัวอย่างที่โมเดลแจ้งให้ ViewModel ทราบถึงการเปลี่ยนแปลงคุณสมบัติของโมเดล สิ่งนี้ทำให้ฉันกังวลว่าอาจจะไม่ได้ทำด้วยเหตุผลบางประการ มีรูปแบบสำหรับการแจ้งเตือน ViewModel ของการเปลี่ยนแปลงใน Model หรือไม่? ดูเหมือนว่าจะมีความจำเป็นเนื่องจาก (1) มี ViewModel มากกว่า 1 แบบสำหรับแต่ละรุ่นและ (2) แม้ว่าจะมี ViewModel เพียงตัวเดียวการกระทำบางอย่างในโมเดลอาจส่งผลให้คุณสมบัติอื่น ๆ เปลี่ยนไป
ฉันสงสัยว่าอาจมีคำตอบ / ความคิดเห็นในรูปแบบ "ทำไมคุณถึงต้องการทำเช่นนั้น" ความคิดเห็นดังนั้นนี่คือคำอธิบายโปรแกรมของฉัน ฉันยังใหม่กับ MVVM ดังนั้นบางทีการออกแบบทั้งหมดของฉันอาจผิดพลาด ฉันจะอธิบายสั้น ๆ
ฉันกำลังเขียนโปรแกรมสิ่งที่น่าสนใจ (อย่างน้อยก็สำหรับฉัน!) มากกว่าคลาส "ลูกค้า" หรือ "ผลิตภัณฑ์" ฉันกำลังเขียนโปรแกรม BlackJack
ฉันมีมุมมองที่ไม่มีรหัสใด ๆ อยู่ข้างหลังและอาศัยการเชื่อมโยงกับคุณสมบัติและคำสั่งใน ViewModel (ดูบทความของ Josh Smith)
สำหรับดีขึ้นหรือแย่ลงผมเอาทัศนคติที่ว่ารุ่นควรมีชั้นเรียนไม่ได้เป็นเพียงเช่นPlayingCard
, Deck
แต่ยังBlackJackGame
ชั้นที่ช่วยให้สถานะของทั้งเกมและรู้ว่าเมื่อผู้เล่นที่มีหน้าอกหายไปตัวแทนจำหน่ายที่มีการวาดการ์ดและ คะแนนปัจจุบันของผู้เล่นและเจ้ามือคืออะไร (น้อยกว่า 21, 21, หน้าอก ฯลฯ )
จากที่BlackJackGame
ฉันเปิดเผยวิธีการเช่น "DrawCard" และเกิดขึ้นกับฉันว่าเมื่อการ์ดถูกวาดคุณสมบัติเช่นCardScore
และIsBust
ควรได้รับการอัปเดตและค่าใหม่เหล่านี้จะสื่อสารกับ ViewModel บางทีนั่นอาจเป็นความคิดที่ผิดพลาด
อาจใช้ทัศนคติที่ ViewModel เรียกว่าDrawCard()
เมธอดดังนั้นเขาจึงควรรู้เพื่อขอคะแนนที่อัปเดตและดูว่าเขามีหน้าอกหรือไม่ ความคิดเห็น?
ใน ViewModel ของฉันฉันมีตรรกะในการจับภาพจริงของการ์ดเล่น (ตามชุดสูทอันดับ) และทำให้พร้อมใช้งานสำหรับมุมมอง โมเดลไม่ควรเกี่ยวข้องกับสิ่งนี้ (บางที ViewModel อื่น ๆ จะใช้ตัวเลขแทนการเล่นภาพการ์ด) แน่นอนว่าอาจมีบางคนบอกฉันว่า Model ไม่ควรมีแนวคิดของเกม BlackJack และควรจัดการใน ViewModel?
OnBust
และ VM สามารถสมัครใช้งานได้ ฉันเดาว่าคุณสามารถใช้แนวทาง IEA ได้เช่นกัน