Bir zamanlar sonunda inşa edilmiş ve konuşlandırılmış bir MVVM / WPF projesine başladım ve bunun için birçok Caliburn.Micro MVVM Çerçevesi üzerinde çalıştım. Gerçektir: Ben bitti değil bunun için Caliburn.Micro kullanarak ve (özellikle, sadece bazı MVVM terimleri ve tanımları kendim uygulamak sona erdi ViewModelBase
ve RoutedCommand
sınıflar).
Şimdi aynı satırlar boyunca biraz daha büyük bir projeye tayin edildim: “Tek Kullanıcı Zengin Müşteri Çevrimdışı Masaüstü Uygulaması”, yani, Caliburn.Micro'yu kullanmaya karar verdim. Ve işte benim "sorunum" başlıyor.
Başlığı "MVVM kullanıyorsanız bir çerçeveye ihtiyacınız var" diyen bu ünlü blog yazısında okudum :
“MVVM gibi bir şeyi bir çerçevesiz yapmayı denemek çok büyük bir iştir. Tonlarca yinelenen kod, tekerleği yeniden icat etmek ve insanları farklı düşünmeleri için yeniden eğitmek .
En azından bir çerçeveyle, yinelenen koddan kaçınırsınız ve umarım tekerleği yeniden icat etmek zorunda kalmazsınız - insanları yeniden eğitmeye odaklanmanıza izin verir. Yeniden eğitme kısmı genellikle kaçınılmazdır, ancak bir çerçeve işlemi kolaylaştıran sıhhi tesisat kodu ve yapısı sağlar. "
İlk okumamda hemfikir olurdum ama Caliburn.Micro (CM) ile olan asıl uygulamamdaki asıl deneyimim cansızlık ve oryantasyon bozukluğu olmak. Diğer bir deyişle, çerçeve süreci tam anlamıyla kolaylaştırmadı. Rob Eisenberg tarafından sağlanan sürekli yinelenen örnekleri gayrı (çok) gayri resmi dokümantasyonda okumak ve toplanmış olan örneklerden kullanım örneklerini ve bunların dayalı olarak çalışacak şekilde tasarlandıkları tamamen dolaylı sınıf ve arayüz ilişkilerini çıkarmaya çalışmak . yan etkiler, tecrübeli bir dahi olmadığınız sürece insanca imkansız görünüyor (rant için üzgünüm ama sanırım ne demek istediğimi biliyorsunuz).
Önemsiz bir senaryodan hiçbir zaman birlikte çalışmadığım ve sahip olamadığım bir sorunu çözen görünen IoC kaplarını içerdiği söylenmemelidir . Sorunum ve uygulama alanlarım hakkında düşünmek yerine, bu şeyleri öğrenmek için daha fazla proje saati harcamak istemiyorum. Sadece bir muz istemiştim ama CM bana bir sepet muz tutan bir goril (IoC) verdi.
Şimdi, uygulamak istediğim MVVM'ye özel derslerden sadece birkaçı oluşan MVVM çerçeveme geri dönmeyi düşündüğüm için, en azından burada bir şeyler kaybediyorsam CM'ye bir şans vermek istiyorum. sırf acemiliksizlik ve cehaletten, sadece basitçe işleri "yanlış yoldan" yapmak. Ve böylece soru şudur:
“Çerçeveler işleri daha kolay ve daha doğal hale getirir” diyen yaygın bir fikir birliği var, ancak bunun tam tersini yaşıyorsam, bu çerçeveyi kullanmamam gerektiği veya yanlış bir şekilde öğrenmeye çalıştığım anlamına mı geliyor? İlk başta bir çerçeve kullanmamam gerektiğine dair bir ipucu var mı? Veya basit MVVM gelişimi için CM'nin nasıl kullanıldığını anlamanın bir “doğru” yolu var mı?
RelayCommand
uygulama bulamadım (ICommand özelliklerine bağlanmak yerine doğrudan yöntemlerle yapılan sözleşmelere “bağlandığı” için).
RelayCommand
eğer Caliburn Micro tarafından kullanılan, sizin için işe yaramazsa, başka bir kütüphaneden kullanamamanızın bir nedeni göremiyorum .
EventAggregator
mesaj göndermek için Microsoft PRISM'leri ,NotificationObject
ViewModelBase'i veRelayCommand
komutları için MVVM Light'larını kullanmayı seviyorum . Önemli olan, çerçevenin sizin için hangi problemleri çözeceğini belirlemektir ve sadece bu çözümleri kullanın. Tüm çerçeve kütüphanesini kullanmak zorunda kaldığınızı düşünmeyin.