https://en.wikipedia.org/wiki/Entity_component_system
Would be nice if something like Swift's "Protocols" could be used in a more dynamic way, at the code level.
https://en.wikipedia.org/wiki/Entity_component_system