SharedState Component Change Status Notification

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 proyek

Biasanya, 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 Pembaruan

atau kami berlangganan ke acara yang sangat spesifik, yang disebut secara independen dalam komponen "dilacak", dan kemudian diproses nanti.


Berlangganan acara di komponen dan memprosesnya

Ada 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 Umum

Dalam 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 umum

Di 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 SharedEvents

Dan 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 umum

Sekarang Anda perlu menambahkan tautan ke SharedEvents , mendapatkannya dari objek game di komponen SharedState


Mendapatkan SharedEvents di Komponen SharedState

Sekarang 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 pengindeks

Sekarang 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 Data

Dan sekarang dalam metode FirstComponent kami menambahkan penangan dan mencetak informasi tentang perubahan keadaan umum ke konsol


Perubahan Status Umum Penanganan Acara

Sekarang, 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 dasar

Tambahkan metode abstrak dan panggil di event handler


Menambahkan metode abstrak untuk menangani acara di kelas anak

Dan 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 SecondComponent

Dan 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:

Source: https://habr.com/ru/post/id438628/


All Articles