I’m a big fan of MVC pattern. It’s definitely an excellent architectural pattern and it has done splendid job in last few years. But again, it has some drawback.
The first thing, it does not provide user boundary explicitly. A controller action normally renders a view. But it has no idea about user activity. In general case, user activity spans more than one view and there may have some intermediate state. In this case, developer needs to manage navigation between the different sub views coupling several controllers. It has far-reaching consequence I think.
Secondly, I must say little bit about presentation layer that is the views. It has improved a lot but I think it’s still old-fashioned. Developer needs to write raw html code by hand. It can’t interact business process natively. Views require dedicated code coupling multiple controllers that act for business process. I’m not saying it’s bad, but definitely it’s an issue to ponder.
Thirdly, the model level, MVC doesn’t provide specific framework to manage data object, I would say, it just contains some entity. How they will interact with views, how they will communicate with physical data, there is no specific direction. Sometime they are only created for specific views and something for accessing physical data eventually they are blended with business process. Developer may sometime get confused, they need to develop own implementation.
Personally I like and use MVC pattern specially asp.net mvc3 and spring MVC. It’s really a good pattern. But I would say, it’s quite complex and not suitable for thin application development.