Soruyu cevaplamak için, Evet, her görünümün kendi Görüntüleme Modeli olmalıdır. Ancak tüm hiyerarşiyi modellemeye gerek yoktur. Sadece görünümün ihtiyacı.
MVVM ile ilgili en fazla çevrimiçi kaynakla yaşadığım sorun:
Çoğu örnekte Görünüm, Modelin neredeyse 1'e 1 eşleşmesidir. Ama aynı Modelin farklı yönleri için farklı görüşlerin olduğu senaryomda, kendimi iki seçenek arasında sıkışmış buluyorum:
Diğer tüm görünüm modelleri tarafından kullanılan bir monolitik görünüm modeli
Veya her görünüm için bir görünüm modeli
Ama ikisi de ideal değil.
Model odaklı Görüntüleme Modeli (MVM), kod çoğaltmada düşük olsa da, sürdürülmesi gereken bir kabus
Görünüm Odaklı Görünüm Modeli (VVM) her görünüm için son derece özel sınıflar üretir, ancak kopyalar içerir.
Sonunda, Görüntüleme başına bir VM'ye sahip olmanın ve kodlamanın daha kolay olduğuna karar verdim, bu yüzden VVM yaklaşımı ile gittim.
Kod çalıştıktan sonra, tüm ortak özellikleri ve işlemleri geçerli, son haline getirmeye başladım:
Bu son formda, ortak görünüm model sınıfı her bir VVM'de oluşturulur.
Tabii ki, hala neyin ortak / özel olarak kabul edildiğine karar vermeliyim. Bir görünüm eklendiğinde / birleştirildiğinde / silindiğinde bu denge değişir.
Ancak bununla ilgili güzel olan şey, artık üyeleri ortaktan VVM'ye yukarı / aşağı doğru itebiliyorum ve bunun tersi de kolay.
Nesneleri senkronize tutma hakkında kısa bir not:
Ortak Görüş Modeline sahip olmak bunların çoğunu halleder. Her VVM'nin aynı Ortak Görünüm Modeline bir referansı olabilir.
Ayrıca, basit geri çağrı yöntemleriyle başlama eğilimindeyim ve birden fazla dinleyiciye ihtiyaç duyulduğunda olay / gözlemciye dönüşüyorum.
Ve gerçekten karmaşık olaylar için (yani, beklenmedik basamaklı güncellemeler), bir Arabulucu kullanmaya geçirdim.
Bir çocuğun ebeveynine geri başvurusu olduğu koddan uzak durmuyorum. Kodun çalışmasını sağlamak için her şey.
Ve yeniden düzenleme fırsatı doğarsa, ben de alırdım.
Aldığım dersler:
- Çirkin / Çalışma kodu> Güzel / Çalışmayan kod
- Birden fazla küçük sınıfı birleştirmek, büyük bir sınıfı ayırmaktan daha kolaydır