Basit bir uygulama oluşturmak için WPF ve Entity Framework ile MVVM tasarım desenini kullanmaya çalışıyordum. Eğer sınıflar gevşek bir şekilde birleştiyse her şey iyi ve iyi gider, ama eğer sth varsa. İki model sınıfı gibi: Müşteri ve Adres ve bir Müşteri adresleri var.MVVM, koleksiyonlar ve ORM
Artık bu sınıflar için iki VM sınıfı oluşturmam gerekiyor - CustomerVM ve AddressVM. CustomerVM, AddressVM nesnelerinin ObservableCollection olmalıdır. Bu VM sınıflarına yapılan her değişiklik (hem MüşteriVM hem de AddressVM'deki tüm CRUD işlemlerini içerir) model sınıflarına yansıtılmalı - bu yüzden, örneğin, bir kod dizisi yazmam gerekiyor. ObservableCollection değiştirilen olaya abone olur ve yeni bir nesne eklenirse, modele yeni bir nesne ekleyin ... ve benzeri ...
Bununla ne yapmalı? MVVM kullanırken bu normal mi? Ben her şeyi iyi yapıyorum? Böyle basit bir sınıf hiyerarşisi için gereken kod miktarını nasıl azaltabilirim? Hiyerarşideki diğer sınıflarla "iyi davranan" temel VM sınıfları yaratabilecek herhangi bir çerçeve var mı? Sınıf ilişkileri daha karmaşıksa ne yapmalı?
VEYA Basit koymak için: aynı Orada
Customer1.Adresses.Add(new Address{City="New York"})
: Model koleksiyonlarında vm koleksiyonlarında yapılan değişiklikleri yansıtacak şekilde nasıl
:
CustomerVM1.AdressesVM.Add(new AddressVM{City="New York"})
bir eşdeğerini neden olmalıdır Diğer taraftan problem - modelde koleksiyon modeline yapılan değişikliklerin nasıl yansıtılacağı, modele dahil olmak üzere, ancak birincisi ile daha çok ilgileniyorum çünkü daha pratik Uygulama ve vm nesneleri çoğu durumda basitçe yeniden yaratılabilir.
Harika bir cevap için çok teşekkür ederim. Bu, sorunu çözmenin bir yoludur, ancak IMO, daha az kod yazmanıza neden olmaz - bunu yapmanın daha temiz bir yoludur. Yine de başka bir katman olan Presenter'a ihtiyacınız var ve bunlar olması gerekenden daha karmaşık hale geliyor. – kubal5003
Dün VM sınıfları oluşturmak yerine "azaltılmış" mvvm gibi bir şey yapmayı düşünüyordum - model sınıfını kısmi sınıfların kullanımı yoluyla genişletmek istiyorum. Şimdi ihtiyacım olan her özellik için, eski olanı - yani MVVM'de olduğu gibi - kapsülleyen bir tane daha yaratabilirim. Sade ve eski bir koleksiyon için sadece INotifyCollectionChanged'i uygulayan ve depolamak için düz eski koleksiyonu kullanan bir sarmalayıcı koleksiyonu oluşturabilirim. Bu konu hakkında ne düşünüyorsun? – kubal5003
Düşünürken düşündüğüm bir şey belki de MyCollection gibi genel bir koleksiyon oluşturabilir -> bu model, model <-> viewmodel etkileşimleri hakkında ihtiyaç duyulan her şeyi bilmeli ve sunucuda yaptığınız her şeyi halledebilmelidir. İyi yazılmışsa, her yerde yeniden kullanılabilir. –
kubal5003