ในการตอบคำถามใช่แต่ละมุมมองควรมีรูปแบบมุมมองของตัวเอง แต่ไม่จำเป็นต้องทำแบบจำลองลำดับชั้นทั้งหมด เฉพาะมุมมองที่ต้องการ
ปัญหาที่ฉันมีกับทรัพยากรออนไลน์ส่วนใหญ่เกี่ยวกับ MVVM:
ในตัวอย่างส่วนใหญ่มุมมองเกือบจะทำแผนที่เป็นแบบ 1 ต่อ 1 ของโมเดล แต่ในสถานการณ์สมมติของฉันที่มีมุมมองที่แตกต่างกันสำหรับแง่มุมที่แตกต่างกันของโมเดลเดียวกันฉันพบว่าตัวเองติดอยู่ระหว่างสองตัวเลือก:
โมเดลมุมมองเสาหินหนึ่งที่ถูกใช้โดยโมเดลมุมมองอื่นทั้งหมด

หรือมุมมองหนึ่งแบบสำหรับแต่ละมุมมอง

แต่ทั้งคู่ก็ไม่เหมาะ
Model-oriented View Model (MVM) ในขณะที่การทำสำเนารหัสต่ำนั้นเป็นฝันร้ายที่ต้องรักษา
View-oriented View Model (VVM) สร้างคลาสที่มีความเชี่ยวชาญสูงสำหรับแต่ละมุมมอง แต่มีการทำซ้ำ
ในที่สุดฉันตัดสินใจว่าการมี VM ต่อหนึ่งมุมมองนั้นง่ายต่อการบำรุงรักษาและใช้รหัสดังนั้นฉันจึงใช้วิธี VVM
เมื่อรหัสทำงานฉันเริ่ม refactoring คุณสมบัติทั่วไปและการดำเนินงานทั้งหมดในรูปแบบปัจจุบันสุดท้าย:

ในรูปแบบสุดท้ายนี้คลาสโมเดลมุมมองทั่วไปถูกสร้างขึ้นในแต่ละ VVM
แน่นอนฉันยังต้องตัดสินใจว่าอะไรเป็นเรื่องธรรมดา / ผู้เชี่ยวชาญ และเมื่อมุมมองถูกเพิ่ม / ผสาน / ลบความสมดุลนี้จะเปลี่ยนไป
แต่สิ่งที่ดีเกี่ยวกับเรื่องนี้คือตอนนี้ฉันสามารถผลักดันสมาชิกขึ้น / ลงจาก VVM และกลับกันได้อย่างง่ายดาย
และบันทึกย่อเกี่ยวกับการรักษาวัตถุที่ซิงค์:
การมี Common View Model ดูแลส่วนใหญ่อยู่ VVM แต่ละตัวสามารถมีการอ้างอิงไปยัง Common View Model เดียวกันได้
ฉันมักจะเริ่มต้นด้วยวิธีการโทรกลับอย่างง่ายและพัฒนาเป็นเหตุการณ์ / ผู้สังเกตการณ์หากมีความต้องการผู้ฟังหลายคนเกิดขึ้น
และสำหรับเหตุการณ์ที่ซับซ้อนจริงๆ (เช่นการปรับปรุงเรียงซ้อนที่ไม่คาดคิด) ฉันจะเปลี่ยนไปใช้การเป็นสื่อกลาง
ฉันไม่อายห่างจากรหัสที่เด็กมีการอ้างอิงกลับไปยังผู้ปกครอง อะไรก็ได้ที่ทำให้โค้ดทำงานได้
และถ้าโอกาสในการสร้างใหม่เกิดขึ้นฉันก็จะเอาไป
บทเรียนที่ฉันได้เรียนรู้:
- รหัสน่าเกลียด / ใช้งานได้> รหัสสวยงาม / ไม่ทำงาน
- เป็นการง่ายกว่าที่จะรวมคลาสเล็ก ๆ หลายคลาสเข้าด้วยกันเพื่อทำลายชั้นเรียนขนาดใหญ่