I am puzzled about adding another layer of abstraction to my dice simulator, a contract that enables the code to slip easily between changes to my GUI and my data.
Perhaps two sets of Model, View, Controller? One set for a basic program to receive user input, and another set which varies according to the user’s input?