Atunci când comparăm modul în care șahul ar putea gestiona agregarea evenimentelor cu modul în care MVVMcross îl gestionează, trebuie să luăm în considerare contextul și scopul agregării evenimentelor în ambele scenarii.
Agregarea evenimentului în șah
În contextul șahului, agregarea evenimentelor s -ar putea referi la gestionarea și prelucrarea secvenței de mișcare sau evenimente care au loc în timpul unui joc. Aceasta ar putea implica urmărirea fiecărei mișcări, captare, verificare sau verificare. Într-o abordare de proiectare (DDD) bazată pe domeniu, mișcările de șah ar putea fi modelate ca evenimente de domeniu, similare cu modul în care acestea sunt gestionate în alte sisteme provenite de evenimente. Fiecare eveniment ar reprezenta o acțiune specifică sau o schimbare de stat în joc, cum ar fi o piesă care se mișcă sau este capturată. Aceste evenimente ar fi stocate într -un jurnal sau jurnal, permițând reconstruirea stării actuale a jocului, reconstruind aceste evenimente.
De exemplu, un joc de șah ar putea folosi evenimente precum „Piecemoved”, „Piececapted” sau „Checkmateocurred”. Aceste evenimente ar fi persistat și ar putea fi folosite pentru a analiza jocul sau pentru a asigura consecvența în diferite state de joc. Cu toate acestea, Chess în sine nu „gestionează” în mod inerent agregarea evenimentelor în modul în care fac cadrele software; În schimb, oferă un domeniu în care se poate aplica agregarea evenimentelor.
Agregarea evenimentelor în MVVMcross
MVVMcross folosește un model de agregare a evenimentelor prin pluginul său Messenger. Acest plugin oferă un mecanism centralizat pentru ca componentele să comunice între ele fără a fi strâns cuplat. Permite mai multor editori să trimită mesaje (evenimente) către mai mulți abonați prin intermediul unui mediator, care este Mesagerul în sine.
MVVMcross Messenger acceptă funcții precum publicarea evenimentelor, abonarea la evenimente și gestionarea abonamentelor. Utilizează referințe slabe pentru a preveni scurgerile de memorie, asigurându -se că componentele pot fi colectate de gunoi, chiar dacă sunt abonate la evenimente. Această abordare este deosebit de utilă în arhitecturile MVVM (Model-View-ViewModel), unde modelele de vizualizare trebuie să comunice între ele fără referințe directe.
Aspectele cheie ale agregării evenimentelor MVVMcross includ:
- Metode de publicare: Componentele pot publica evenimente folosind metode precum „Publish”.
- Metode de abonament: Componentele se pot abona la evenimente folosind metode precum `abonat`,` abondeonmainThread`, sau `abundenthreadpoolthread`.
- Gestionarea abonamentelor: Mesagerul oferă metode de verificare dacă există abonamente pentru evenimente sau etichete specifice, permițând o mai bună gestionare a manipulării evenimentelor.
Comparație
În timp ce șahul poate fi modelat folosind principii de agregare a evenimentelor similare cu cele din sistemele software, MVVMCross oferă o implementare specifică a agregării de evenimente concepute pentru arhitecturile MVVM. Principala diferență constă în context și scop:
- Șah: Agregarea evenimentelor se referă mai mult la urmărirea și gestionarea statelor de joc prin Evenimente de domeniu, care este o aplicație conceptuală a principiilor de aprovizionare a evenimentelor.
- MVVMcross: Agregarea evenimentelor este o implementare tehnică pentru facilitarea comunicării între componentele cuplate în mod vag într -o aplicație, folosind un mesager centralizat.
În rezumat, șahul nu „gestionează” agregarea evenimentelor în același mod în care face MVVMcross; În schimb, șahul oferă un domeniu în care pot fi aplicate concepte de agregare a evenimentelor. MVVMcross, pe de altă parte, oferă o implementare concretă a agregării de evenimente pentru dezvoltarea de software.
Citări:[1] https://ep2024.europython.eu/session/event-sourcing-from-the-ground-up
[2] https://www.mvvmcross.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-lo-you-handle-multiple-event-sources
]
[7] https://www.youtube.com/watch?v=mfsrsqza1uq
[8] https://prismlibrary.github.io/docs/event-aggregator.html
[9] https://learn.microsoft.com/en-us/analysis-services/multidimensional-models-olap-logiccical-cube-objects/aggregations-and-aggregation-designs?view=asallproducts-allversions
[10] https://www.chess.com/forum/view/tournents/why-delay-next-round-for-mathematic-irlevant-games
[11] https://blog.magnusmontin.net/2014/02/28/using-the-event-aggregator-pattern-to-communicate-between-iew-models/