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?
sumber
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.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.Jawaban:
Saya telah mencoba CaliburnMicro dan MVVMLight dan ketika menggunakan Caliburn saya benar-benar merasakan apa yang Anda rasakan, tentu terasa sangat ajaib dapat mengikat kontrol ke properti hanya dengan menggunakan Name = "PropertyName" alih-alih Teks lama = "{Bind PropertyName}" tetapi di Akhirnya Caliburn pergi jauh ke laut untuk melakukan hal ajaib ini, ketika terjadi kesalahan, sangat sulit untuk melakukan debug, untuk memperburuk keadaan mereka memiliki banyak cara untuk melakukan satu hal.
Tetapi ketika menggunakan MVVMLight itu tipis, ketika Anda menggunakannya Anda mungkin menyadari bahwa itu hampir 100% seperti MVVM Framework Anda, dengan beberapa fitur ditaburkan di dalamnya.
Saya tahu ini tidak menjawab pertanyaan Anda "Bagaimana TIDAK menggunakan kerangka kerja" tapi terus terang saya tidak bisa merekomendasikan Anda untuk pergi rute itu karena itu hanya salah, saya juga berpikir Anda hanya kehilangan karena Anda menggunakan kerangka berfitur lengkap daripada menggunakan sederhana satu dulu.
sumber
Penting untuk menyadari apa itu MVVM. Ini bukan sedikit fungsionalitas bersama yang tidak harus Anda laksanakan ulang (mem-parsing file JPEG atau menyambung ke server database SQL yang diberikan), ini adalah pola - sebuah pola untuk bagaimana seseorang dapat memilih untuk mengimplementasikan GUI yang kaya. Jadi, jika implementasi pola Anda sederhana dan mudah, saya pikir Anda tidak perlu merasa malu dalam menggunakannya daripada kerangka kerja.
Memang, saya percaya gagasan pola-sebagai-kerangka kerja telah terlalu jauh. Agar segala sesuatu menjadi suatu pola, itu harus menjadi bentuk umum dari suatu kelas solusi. Karena memang demikian, diharapkan pola perlu disesuaikan dengan sistem yang menggunakannya dan Anda tidak dapat melakukannya jika Anda mencoba menggunakan pola satu ukuran untuk semua. Akan jauh lebih konstruktif untuk menyerahkan implementasi pola kepada perancang aplikasi dan menyediakan perpustakaan yang merangkum fungsionalitas, daripada arsitektur.
sumber
DataContext
dll.Pengalaman pertama saya dengan WPF telah menggunakan Caliburn.Micro jadi ini mungkin sangat berbeda dari kebanyakan pengembang. Saya telah menemukan keduanya WPF dan Caliburn.Micro menjadi kurva belajar yang cukup curam, berasal dari WinForms, namun setelah beberapa pengalaman dengan keduanya saya menemukan mereka senang digunakan sebagai pasangan. Saat ini bekerja di organisasi yang berbeda di mana Caliburn.Micro tidak digunakan, saya menemukan bahwa ada BANYAK kode pipa duplikat yang membuat basis kode cukup besar dan rumit.
Saya benar-benar setuju bahwa ada beberapa gotchas dengan Caliburn.Micro, yang dapat menyulitkan debugging, namun begitu berpengalaman mereka lebih kecil kemungkinannya akan menyebalkan lagi. Peningkatan kecepatan pengembangan, kode yang lebih bersih dan lebih ramping serta kerangka keseluruhan yang mendorong MVVM yang lebih baik lebih dari cukup untuk saya.
Caliburn.Micro juga tidak membatalkan stok WPF - itu hanya dibangun di atasnya, yang berarti bahwa Anda masih dapat menggunakan fitur WPF jika Anda suka dan menggunakan Caliburn untuk beberapa bagian jika Anda suka. Ini mirip dengan bagaimana TypeScript dan JavaScript hidup berdampingan dalam pikiran saya.
Saya pasti akan menggunakan Caliburn.Micro dalam proyek WPF baru yang saya kerjakan di masa depan jika diberi kesempatan.
sumber
Bagi siapa pun yang datang ke sini karena frustrasi dengan Caliburn.Micro, lihat kerangka kerja ini: Stylet
Ini terinspirasi oleh Caliburn.Micro, kecuali itu menghilangkan banyak keajaiban yang membuat Anda bingung tentang apa yang terjadi. Selain itu, dokumentasi ditulis dalam banyak bahasa yang lebih jelas tanpa mengasumsikan Anda ingin mengarungi jargon teknis. Jauh lebih baik untuk pemula.
Juga, Stylet mengambil pendekatan ViewModel-First. Caliburn.Micro dan banyak kerangka kerja lainnya menggunakan pendekatan Tampilan-Pertama, yang dilengkapi dengan beberapa masalah canggung. Jika Anda sudah sangat bagus dalam prinsip-prinsip SOLID dan kode berpola, Anda cenderung menemukan pendekatan ViewModel-First yang lebih alami karena dibutuhkan perspektif bahwa logika Anda harus menggerakkan sistem - bukan tampilan.
sumber