Når vi sammenligner, hvordan skak kan håndtere begivenhedsaggregering med, hvordan MVVMCross håndterer det, er vi nødt til at overveje konteksten og formålet med begivenhedsaggregering i begge scenarier.
Begivenhedsaggregation i skak
I forbindelse med skak kunne begivenhedsaggregation henvise til styring og behandling af rækkefølgen af bevægelser eller begivenheder, der forekommer under et spil. Dette kan involvere sporing af hver bevægelse, indfangning, check eller checkmate. I et domænedrevet design (DDD) -tilgang kunne skakbevægelser modelleres som domænebegivenheder, svarende til hvordan de håndteres i andre hændelsessystemer. Hver begivenhed vil repræsentere en bestemt handling eller statsændring i spillet, såsom et stykke, der bevæger sig eller bliver fanget. Disse begivenheder vil blive gemt i en tidsskrift eller log, hvilket gør det muligt at rekonstrueres ved at afspille disse begivenheder.
For eksempel kan et skakspil muligvis bruge begivenheder som "Piecemoved", "Piececaptured" eller "CheckMateOccured." Disse begivenheder ville blive vedvarende og kunne bruges til at analysere spillet eller til at sikre konsistens på tværs af forskellige spiltilstande. Skak i sig selv "håndterer" dog ikke i sagens hændelsesaggregering på den måde, softwarerammer gør; I stedet giver det et domæne, hvor begivenhedsaggregering kan anvendes.
Begivenhedsaggregation i MVVMCross
MVVMCROSS bruger et hændelsesaggregeringsmønster gennem sit Messenger -plugin. Dette plugin tilvejebringer en centraliseret mekanisme for komponenter til at kommunikere med hinanden uden at være tæt koblet. Det giver flere udgivere mulighed for at sende beskeder (begivenheder) til flere abonnenter gennem en mægler, som er selve messenger.
MVVMCross Messenger understøtter funktioner som udgivelsesbegivenheder, abonnerer på begivenheder og styring af abonnementer. Den bruger svage referencer til at forhindre hukommelseslækager, hvilket sikrer, at komponenter kan indsamles affald, selvom de abonneres på begivenheder. Denne tilgang er især nyttig i MVVM (Model-View-ViewModel) arkitekturer, hvor visningsmodeller er nødt til at kommunikere med hinanden uden direkte referencer.
De vigtigste aspekter af MVVMCross's begivenhedsaggregation inkluderer:
- Udgivelsesmetoder: Komponenter kan offentliggøre begivenheder ved hjælp af metoder som 'Publicer'.
- Abonnementsmetoder: Komponenter kan abonnere på begivenheder ved hjælp af metoder som 'Abonner', 'AboncendOnMainthread' eller 'AboncendOnThreadPoolThread'.
- Abonnementsstyring: Messenger giver metoder til at kontrollere, om der er abonnementer på specifikke begivenheder eller tags, hvilket giver mulighed for bedre styring af begivenhedshåndtering.
Sammenligning
Mens skak kan modelleres ved hjælp af begivenhedsaggregeringsprincipper, der ligner dem i softwaresystemer, giver MVVMCROSS en specifik implementering af begivenhedsaggregation designet til MVVM -arkitekturer. Den største forskel ligger i sammenhæng og formål:
- Skak: Begivenhedsaggregation handler mere om sporing og styring af spiltilstande gennem domænebegivenheder, som er en konceptuel anvendelse af principper for sourcing af begivenheder.
- MVVMCROSS: Begivenhedsaggregation er en teknisk implementering til at lette kommunikationen mellem løst koblede komponenter i en applikation ved hjælp af en centraliseret messenger.
Sammenfattende "håndterer" skak ikke "begivenhedsaggregering på samme måde som MVVMCross gør; I stedet leverer skak et domæne, hvor begivenhedsaggregeringskoncepter kan anvendes. MVVMCROSS tilbyder på den anden side en konkret implementering af begivenhedsaggregering til softwareudvikling.
Citater:[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-ourcing-vs-cdc/
)
[5] https://www.linkedin.com/advice/0/how-do-you-handle-multiple-event-ources
)
[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-logical-cube-objects/aggregations-and-aggregation-designs?view=asallproducts-allversions
[10] https://www.chess.com/forum/view/tournaments/why-lay-next-round-for-matematical-irrelevant-games
)