At the heart of the new architecture is an action queue. This is essentially very similar to a Command Pattern. FullScore has already begun to adopt an action pattern, and it's providing an amazingly simplified architecture, where each "step" that is taken in the program can be broken down atomically into a single action, and easily decoupled atomically into a single class.
Piping everything through an action queue makes it:
easier to manage input devices (keyboard and joystick inputs can both summon the same action)
easier to manage custom control mapping to different keys
easier to manage program state when each action is an atomic change
possible to create undo/redo lists
possible to write scripts by listing actions in a sequence
possible to record and/or playback entire project histories
easier to test single-purpose actions and their effects on dependencies
easier to manage dependency injection by passing only the necessary dependencies into an action
Actions Are Where It's At
At the heart of the new architecture is an action queue. This is essentially very similar to a Command Pattern. FullScore has already begun to adopt an action pattern, and it's providing an amazingly simplified architecture, where each "step" that is taken in the program can be broken down atomically into a single action, and easily decoupled atomically into a single class.
Piping everything through an action queue makes it: