decouple the dispatcher (a key, basically) with the actions to take upon receiving such a message. allows us to have multiple actions for one key without weird hacks