Trygve was very explicit about the model being a model of how the user thinks about the problem:
There should be a one-to-one correspondence between the model and its parts on the one hand, and the represented world as perceived by the owner of the model on the other hand.
https://web.archive.org/web/20090424042645/http://heim.ifi.u...
Second paragraph.
> There has to be a boundary that controls changes to the model.
Yes. It's called the API of the model. The model makes available API for all semantically valid operations. As I wrote elsewhere, I usually have a facade that acts as the top-level API for the model.
The views can call this API. So can other entities.
> The controller ... decides what view to show
possibly. But views can handle their own subview.
> The controller ... and retrieves model data to project
Nope. Not the job of the controller.
> The controller ... and translates change events coming from the external world (views or events) into changes the model should interpret.
Nope, it doesn't. The views typically do that as well. Controllers may be get involved if there is a complex sequence of steps that doesn't really naturally fit into a view.
> That’s a lot for one class so it can get confusing very quickly.
Yeah, if you put all sorts of stuff in the controller that doesn't belong there.
> Why localize it in one place?
Indeed. Don't incorrectly localize all these things in one place. MVC, for example, tells you not to do this.
> This all works but three years later it’s hard to figure out when I read the code again.
Yes. MVC is much better than that thing you came up with.