Saya pernah memulai proyek MVVM / WPF, yang akhirnya dibangun dan digunakan, dan untuk itu saya mempelajari banyak kerangka kerja Caliburn.Micro MVVM. Faktanya adalah: Saya akhirnya tidak menggunakan Caliburn.Micro untuk itu, dan akhirnya menerapkan beberapa konsep MVVM sendiri (khususnya, hanya kelas ViewModelBase
dan RoutedCommand
).
Sekarang saya ditugaskan untuk proyek yang agak lebih besar di sepanjang baris yang sama: "Aplikasi Desktop Offline Offline Klien Tunggal Pengguna", jadi saya katakan, dan saya memutuskan untuk menggunakan Caliburn.Micro. Dan di situlah "masalah" saya dimulai.
Saya telah membaca di posting blog terkenal ini , yang judulnya mengatakan bahwa "Jika Anda menggunakan MVVM maka Anda memerlukan kerangka kerja", bahwa:
"Mencoba melakukan sesuatu seperti MVVM tanpa kerangka kerja adalah pekerjaan yang sangat besar. Banyak kode duplikat, menciptakan kembali roda, dan melatih kembali orang untuk berpikir secara berbeda .
Setidaknya dengan kerangka kerja Anda menghindari kode duplikat dan mudah-mudahan tidak perlu menemukan kembali roda - memungkinkan Anda untuk fokus melatih kembali orang. Bagian pelatihan ulang umumnya tidak dapat dihindari, tetapi suatu kerangka kerja menyediakan kode dan struktur pipa ledeng, membuat prosesnya lebih mudah. "
Saya akan setuju pada bacaan pertama tetapi pengalaman saya yang sebenarnya dengan Caliburn.Micro (CM) dalam aplikasi saya yang sebenarnya adalah cluelessness dan disorientasi. Artinya, kerangka kerja tidak membuat proses lebih mudah sama sekali, justru sebaliknya. Membaca contoh-contoh yang selalu berulang yang diberikan oleh Rob Eisenberg dalam dokumentasi informal (juga), dan mencoba untuk menyimpulkan pola penggunaan dari sampel yang disediakan berbelit-belit, dan hubungan kelas dan antarmuka yang tidak langsung, di mana hal-hal yang tampaknya dirancang untuk bekerja berdasarkan pada efek samping, tampaknya tidak mungkin secara manusiawi kecuali jika Anda adalah seorang jenius berpengalaman (maaf untuk kata-kata kasar, tapi saya kira Anda tahu apa yang saya maksud).
Belum lagi bahwa setiap skenario sepele di atas tampaknya melibatkan wadah IoC, yang merupakan sesuatu yang belum pernah saya kerjakan, dan yang sepertinya memecahkan masalah yang bahkan mungkin tidak saya miliki . Saya merasa tidak ingin menghabiskan lebih banyak jam proyek untuk mempelajari hal-hal itu alih-alih memikirkan masalah dan domain aplikasi saya. Saya hanya ingin pisang, tetapi CM memberi saya gorila (IoC) memegang sekeranjang pisang.
Sekarang saya sedang mempertimbangkan untuk pindah kembali ke kerangka MVVM tenunan saya - hanya terdiri dari beberapa kelas khusus MVVM yang sebenarnya ingin saya terapkan - saya ingin setidaknya memberi CM kesempatan, kalau-kalau saya kehilangan sesuatu di sini, atau sekadar melakukan hal-hal "dengan cara yang salah" karena kurangnya pengalaman dan ketidaktahuan. Dan pertanyaannya adalah:
Ada konsensus luas bahwa "kerangka kerja membuat segalanya lebih mudah dan lebih alami", tetapi jika saya mengalami hal yang sebaliknya, apakah ini berarti saya tidak boleh menggunakan kerangka kerja, atau bahwa saya mencoba mempelajarinya dengan cara yang salah? Apakah ada petunjuk bahwa saya seharusnya tidak menggunakan kerangka kerja sejak awal? Atau adakah cara "benar" untuk mengetahui cara menggunakan CM untuk pengembangan MVVM sederhana?
RelayCommand
implementasi (karena "mengikat" langsung ke metode dengan konvensi, alih-alih mengikat ke properti ICommand).
RelayCommand
dari perpustakaan lain jika yang digunakan oleh Caliburn Micro tidak bekerja untuk Anda.
EventAggregator
pesan, danNotificationObject
untuk ViewModelBase, dan MVVM LightRelayCommand
untuk perintah. Yang penting adalah mengidentifikasi masalah apa yang akan dipecahkan oleh kerangka kerja untuk Anda, dan hanya gunakan solusi itu. Jangan merasa Anda terpaksa menggunakan seluruh pustaka kerangka kerja.