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

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

https://engineering.fb.com/data-infrastructure/messenger/

Unidirectional Dataflow

Event-Driven (& Event-Sourcing, CQRS)

Last updated