Sebagai kelanjutan dari
artikel sebelumnya tentang keadaan umum untuk komponen , saya akan mengembangkan topik lebih lanjut dan ingin mengimplementasikan fitur yang akan menangkap dan memproses peristiwa perubahan keadaan di setiap komponen (ketika data dalam keadaan umum berubah di beberapa komponen).
Tautan ke proyekBiasanya, untuk melacak perubahan data dalam suatu komponen, koneksi langsung dibuat, yaitu, kami memeriksa metode Pembaruan apakah data telah berubah di sana.
Preframe verifikasi data melalui metode Pembaruanatau kami berlangganan ke acara yang sangat spesifik, yang disebut secara independen dalam komponen "dilacak", dan kemudian diproses nanti.
Berlangganan acara di komponen dan memprosesnyaAda banyak kekurangan dalam pendekatan ini, yang sebagian besar dijelaskan dalam artikel sebelumnya. Alasan umum utama untuk kekurangan ini adalah koherensi yang kuat dan pemeliharaan yang kompleks (kemampuan untuk mendukung, mengembangkan proyek, dan refactor).
Membuat Solusi Pemberitahuan Negara
Sekarang setelah Anda memiliki sistem yang memungkinkan Anda melonggarkan koneksi antar komponen dan sarana untuk membuat surat antar komponen, Anda dapat menyingkirkan pemeriksaan nilai secara manual dalam kondisi umum, sebagai berikut:
Skema Pemberitahuan Perubahan Status UmumDalam implementasi yang dijelaskan dalam artikel sebelumnya, data diubah di satu tempat, di pengindeks komponen SharedState, dan oleh karena itu sangat mudah untuk mengontrol perubahan mereka.
Pengindeks dalam kondisi umumDi setter pengindeks, kami menetapkan nilai status.
Sekarang, untuk komponen
SharedState , Anda perlu menambahkan ketergantungan pada
SharedEvents , karena saya akan menggunakannya untuk mengirim pemberitahuan. Tambahkan atribut untuk
SharedState.
Menambahkan ketergantungan SharedState dari SharedEventsDan buat kelas yang mewarisi dari EventData untuk mengirim data dalam pemberitahuan status. Ini akan berisi nama parameter, dalam keadaan dan nilai baru
Menambahkan kelas yang berisi informasi tentang perubahan dalam keadaan umumSekarang Anda perlu menambahkan tautan ke
SharedEvents , mendapatkannya dari objek game di komponen
SharedState
Mendapatkan SharedEvents di Komponen SharedStateSekarang kami akan mengubah setter pengindeks sehingga setiap kali status berubah, pemberitahuan dengan nama "sharedstatechanged" dibuat dan kami meneruskan objek yang berisi semua data tentang perubahan
Ubah setter pengindeksSekarang tetap berlangganan perubahan dalam suatu komponen, ubah data di komponen lain dan periksa cara kerjanya.
Katakanlah
status perubahan
SecondComponent , misalnya, parameter "somedata", dan komponen
FirstComponent memonitor perubahan status dengan berlangganan pemberitahuan
Dalam
SecondComponent, kami memanggil perubahan parameter
Ubah Panggilan DataDan sekarang dalam metode
FirstComponent kami menambahkan penangan dan
mencetak informasi tentang perubahan keadaan umum ke konsol
Perubahan Status Umum Penanganan AcaraSekarang, jika Anda memulai permainan, setelah keadaan umum diubah di
SecondComponent , di komponen
FirstComponent kami akan menerima pemberitahuan dan menampilkan data ke konsol

Sekarang ini berfungsi, Anda dapat sedikit refactor dan membuat kode lebih nyaman. Untuk melakukan ini, Anda harus mentransfer langganan pemberitahuan perubahan dalam keadaan umum ke kelas dasar
SharedStateComponent dan membuat metode abstrak, dengan menerapkan setiap komponen yang akan memproses perubahan status di dalamnya atau tidak, sesuai kebijakan komponen.
Mentransfer langganan ke
SharedStateComponent
Berlangganan pemberitahuan perubahan dalam kondisi umum di kelas dasarTambahkan metode abstrak dan panggil di event handler
Menambahkan metode abstrak untuk menangani acara di kelas anakDan sekarang, di setiap komponen anak dari
FirstComponent dan
SecondComponent, Anda perlu mengimplementasikan metode ini dan memproses perubahan dalam keadaan umum di dalamnya. Tapi kami hanya akan mencetaknya ke konsol seperti sebelumnya
Menerapkan metode abstrak dalam komponen FirstComponent dan SecondComponentDan sekarang ketika kita memulai permainan, kita akan melihat 2 entri di konsol, dari kedua komponen.

Penting!
Dalam implementasi sebelumnya, ada bug di kelas
SharedEvents, dan untuk memperbaikinya Anda perlu mengubah metode
Berlangganan ke:
