Saya sudah mulai belajar tentang Redux dan Bereaksi di dunia web, dan semakin saya mempelajarinya semakin saya menyadari betapa manajemen negara yang menyakitkan di dunia desktop dengan arsitektur gaya MVVM WPF (menggunakan Caliburn khusus untuk mengikat Tampilan untuk ViewModels).
Redux memiliki beberapa prinsip sederhana yang menentukan cara pengelolaan negara, membuat pembaruan UI, penanganan acara, dan perubahan keadaan jauh lebih mudah diprediksi. Prinsipnya adalah:
- Sumber kebenaran tunggal (semua status yang dapat diubah disimpan dalam satu objek bersama).
- Status hanya baca. Itu tidak dapat dimodifikasi oleh komponen melalui kode, yang biasanya terjadi di WPF.
- Status hanya dapat dimodifikasi oleh fungsi murni.
Arsitektur MVVM dari WPF memungkinkan Anda untuk membangun tampilan interaktif dengan sangat cepat, tetapi men-debug masalah ketika berbagai model dan acara semua perubahan kondisi adalah mimpi buruk. Misalnya: peristiwa yang dipicu yang mengubah tampilan dan mencoba mengatur tab default, tetapi data belum selesai memuat secara tidak sinkron dari layanan web sehingga tab tidak ada (belum) sehingga tidak ada yang terjadi
Saya menghabiskan waktu berjam-jam menggambar diagram untuk mencoba dan memahami interaksi yang kompleks antara komponen viewModels yang saling terkait yang saling memperbarui.
Saya mengerti bahwa Redux bertujuan untuk menyelesaikan beberapa keadaan yang tidak dapat diprediksi ini. Apakah ada yang serupa, atau pola arsitektur yang cocok dengan WPF untuk membantu mengelola negara lebih baik? Saya tidak yakin seberapa baik prinsip-prinsip Redux akan bekerja di. NET karena saya belum mencobanya. Mungkin seseorang memiliki pengalaman yang dapat memberikan saran?
Jawaban:
Saya rasa saya tahu apa yang Anda maksud. Pada dasarnya Anda memecahkan masalah dengan menambahkan viewmodel 'controller' atau 'master' (excuse psudocode)
yaitu
ketika Anda melakukan ini dengan Pola Mediator, saya menganggap kelas sebagai Pengendali. yaitu.
Hal semacam ini memungkinkan Anda untuk menempatkan 'flow logic' atau Event Orkestrasi Anda di kelas-kelas bertahan tingkat tinggi ini dan menjaga kode VM ringan. Jika Anda ingin mengubah 'ketika pengguna mengklik BELI, pesanan diproses' hal-hal yang Anda ketahui terlihat di 'OrderFlowController' atau 'OrderProcessVM' atau namun Anda ingin menamai mereka. Daripada kombinasi dari BasketVM, PaymentVM, 3dSecureVM dll
Jadi, dalam contoh spesifik Anda tentang 'tab belum siap' mungkin Anda miliki
sumber