Uma coisa é fato, o controller não contém as regras de negócio.
Ele pode conter validações, baseadas nessas regras (assim como a view também tem). Em desktop, até isso perde o sentido, pois o mecanismo impede que um usuário burle a view, como ocorre na web. Por isso, frameworks desktop geralmente usam uma versão simplificada do MVC.
Mas a responsabilidade pelas regras, em última instância, é do model.
O model deve representar os objetos sendo desenhados, em sua completude. Deveria ser possível criar uma nova aplicação, com controllers e interface diferentes, apenas baseado no model, sem ferir regras de negócio.
[quote]Fora que, num modelo MVC, não necessariamente teremos persistência de dados.
No caso do Rails, o método save do próprio objeto apenas informa que seus dados serão persistidos. Portando é de responsabilidade de alguém outro saber como fazer isso.
PS: Acho que no Rails os Adapters fazem esse trabalho de persistência, o método save do modelo apenas ‘delega’ à ele.[/quote]
Pois é, aí entra novamente a discussão semântica. Há quem acredite que isso deva estar abaixo do model, e há quem acredite que isso é um sub-módulo do model. Agora, o importante é saber que isso não é nem view, nem controller. E que, o modelo MVC não define se persistência é ou não um atributo do model (portanto, essa é uma zona cinza que sempre gerará discussão).
Eu, particularmente, concordo com você. Até porque, tipicamente, podemos ter mais de um mecanismo de persistência para o mesmo tipo de classe. Fica mais fácil pensar conceitualmente no model como as classes que estão na memória.