Software Architecture

Resources for my thinking on UI Programming, Distributed Systems Design and Video Game Architecture. Spoilers: it's the same patterns everywhere.
  • Event-Driven communication
    • Limit direct interaction between components of a system
  • Data-Oriented
    • Events -> Components -> Data Updates
    • Data Updates -> Components -> Events
    • Requests -> Components -> Data Queries -> Response
  • Unidirectional, immutable, pure, side-effects at boundaries
  • Domain-Driven-Design
    • Carefully architect code around core business concepts
My take on video-game architecture
When considering game architecture specifically a few extra elements become relevant:
  • Zero-allocation event dispatch
    • Object pooling
  • Minimal-allocation state update
    • Clever immutable data structures
  • Minimal-allocation projection update
    • Infrequent projection changes can allocate
    • Frequent projection changes should be computed with no allocation
  • Minimal-runtime-instantiation of game entities
    • Object pooling
  • Object lifecycle handling, no dangling subscriptions

Data-Oriented Architecture

Unidirectional Dataflow

Event-Driven (& Event-Sourcing, CQRS)