Sorry if the title is too broad, I'll try to explain this in a more specific way down here.
We need to create a board-game in Java for an University project and we have to use the mvc pattern for it.
We found helpful to view this board game as a Finite State Machine, so we implemented a slight variation of the State pattern, where the context is the Controller and each state manipulates the model in different ways using commands from the Command pattern.
The states are also responsible to get the user input needed to perform their logic from the view, by displaying widgets and getting the user selection.
So for now, the Model is just a "box", a stateless container of data without any game-logic in it. We had a discussion with our tutor and he frowned us upon because he said we were deviating from the OOP approach. For example, we have cards in the game which give different effects; in our implementation, we have an "Effect State" which is handling the different effects by controlling their type:
if (effect.type == RESOURCE){
Command c = new GiveResources(player, effect.resources);
c.execute();
}else if (effect.type == BONUS_ACTION){
controller.state = BONUS_STATE;
}...
Whereas he would so something like:
effect.execute(controller);
By passing the controller as a "callback" (forgive me the improper usage) to get inside the effect the input needed to perform its execution.
Now, I understand that our approach is violating in some way the Separations of Concerns principle, by putting game logic in the controller and outside the effects. But, considering that the set of effects is limited (that's why we chose the enum approach), isn't going back and forth between model and controller introducing way too much overhead? Or should the model "own" the game-logic (relating to this question, substituting the boolean with a State field) and call the Controller every time it needs user input?