Saat membandingkan bagaimana catur dapat menangani agregasi peristiwa dengan bagaimana MVVMCross menanganinya, kita perlu mempertimbangkan konteks dan tujuan agregasi peristiwa di kedua skenario.
Acara Agregasi di Catur
Dalam konteks catur, agregasi peristiwa dapat merujuk pada mengelola dan memproses urutan gerakan atau peristiwa yang terjadi selama permainan. Ini bisa melibatkan pelacakan setiap gerakan, menangkap, memeriksa, atau membuat sekakmat. Dalam pendekatan Domain-Driven Design (DDD), gerakan catur dapat dimodelkan sebagai peristiwa domain, mirip dengan bagaimana mereka ditangani dalam sistem yang bersumber dari acara lainnya. Setiap acara akan mewakili tindakan tertentu atau perubahan negara dalam permainan, seperti bagian yang bergerak atau ditangkap. Peristiwa ini akan disimpan dalam jurnal atau log, memungkinkan keadaan permainan saat ini direkonstruksi dengan memutar ulang acara ini.
Misalnya, permainan catur mungkin menggunakan acara seperti "sedikit diperoleh," "piecaptured," atau "checkmateoccurred." Peristiwa ini akan bertahan dan dapat digunakan untuk menganalisis permainan atau untuk memastikan konsistensi di berbagai negara game. Namun, catur sendiri tidak secara inheren "menangani" agregasi peristiwa dalam cara kerangka kerja perangkat lunak; Sebaliknya, ia menyediakan domain di mana agregasi acara dapat diterapkan.
Acara Agregasi di MVVMCross
MVVMCross menggunakan pola agregasi acara melalui plugin messenger. Plugin ini menyediakan mekanisme terpusat untuk komponen untuk berkomunikasi satu sama lain tanpa digabungkan dengan ketat. Ini memungkinkan beberapa penerbit untuk mengirim pesan (acara) ke beberapa pelanggan melalui mediator, yang merupakan messenger itu sendiri.
MVVMCross Messenger mendukung fitur seperti acara penerbitan, berlangganan acara, dan mengelola langganan. Ini menggunakan referensi yang lemah untuk mencegah kebocoran memori, memastikan bahwa komponen dapat dikumpulkan sampah bahkan jika mereka berlangganan peristiwa. Pendekatan ini sangat berguna dalam arsitektur MVVM (Model-View-ViewModel), di mana model tampilan perlu berkomunikasi satu sama lain tanpa referensi langsung.
Aspek kunci dari agregasi acara MVVMCross meliputi:
- Metode Penerbitan: Komponen dapat mempublikasikan acara menggunakan metode seperti `Publish`.
- Metode berlangganan: Komponen dapat berlangganan acara menggunakan metode seperti `berlangganan`,` SubscribeOnmArthread`, atau `SubscribeOnThreadPoolThread`.
- Manajemen Langganan: Messenger menyediakan metode untuk memeriksa apakah ada langganan untuk acara atau tag tertentu, memungkinkan manajemen penanganan acara yang lebih baik.
Perbandingan ###
Sementara catur dapat dimodelkan menggunakan prinsip agregasi acara yang mirip dengan yang ada dalam sistem perangkat lunak, MVVMCross menyediakan implementasi spesifik dari agregasi acara yang dirancang untuk arsitektur MVVM. Perbedaan utama terletak pada konteks dan tujuan:
- Catur: Agregasi acara lebih banyak tentang melacak dan mengelola status permainan melalui acara domain, yang merupakan aplikasi konseptual dari prinsip -prinsip sumber acara.
- MVVMCROSS: Agregasi acara adalah implementasi teknis untuk memfasilitasi komunikasi antara komponen yang digabungkan secara longgar dalam suatu aplikasi, menggunakan messenger terpusat.
Singkatnya, catur tidak "menangani" agregasi peristiwa dengan cara yang sama seperti yang dilakukan MVVMCross; Sebaliknya, Catur menyediakan domain di mana konsep agregasi acara dapat diterapkan. MVVMCross, di sisi lain, menawarkan implementasi konkret agregasi acara untuk pengembangan perangkat lunak.
Kutipan:[1] https://ep2024.europython.eu/session/event-sourcing-from-the-ground-up
[2] https://www.mvmcross.com/documentation/plugins/messenger
[3] https://debezium.io/blog/2020/02/10/event-sourcing-vs-cdc/
[4] https://github.com/mateusznakodach/ddd.eventsourcing.portsandadapters.typescript.nestjs.chess
[5] https://www.linkedin.com/advice/0/how-do-you-handle-multiple-event-sources
[6] https://securosis.com/blog/understanding-and-slecting-siem-lm-agregation-normalization-and-enrichmen/
[7] https://www.youtube.com/watch?v=mfsrsqza1uq
[8] https://pismlibrary.github.io/docs/event-aggregator.html
[9] https://learn.microsoft.com/en-us/analysis-services/multidimensional-models-olap-gogical-cube-objects/agregations-and-agregation-desains?
[10] https://www.chess.com/forum/view/tournaments/why-delay-next-round-for-mathematicy-irrelevant-games
[11] https://blog.magnusmontin.net/2014/02/28/using-the-event-aggregator-pattern-to-communicate-between-view-models/