I had the same thoughts.
In traditional MVC, the most important thing is to split the View into Model and Controller parts. It seems like a good idea to separate the controller and model simply because you can end up with bloated model objects:
public class UserModel extends DatabaseModel implements XMLable, CRUDdy, Serializable, Fooable, Barloney, Baznatchy, Wibbling, Validating {
public class UserModel extends DatabaseModel implements XMLable, CRUDdy, Serializable, Fooable, Barloney, Baznatchy, Wibbling, Validating {
While for many interfaces you can have separate controllers (or whole templates), and yes, this is more of a procedural nature, but I assume that everything works today. Alternatively, you can understand that some interfaces do the same thing (CRUDdy - storing and retrieving the database, Serializable - the same as for the binary format, XMLable, the same for XML), so you must create a single system for this, with each potential backend is a separate implementation that the system processes. God, this is very poorly written.
Perhaps there is something like “co-classes” that allow you to have separate source files for implementing the controller, which act as if they are members of the model class on which they operate.
As for business rules, they often work with several models at the same time, and therefore they must be separate.