A while ago a developer who’s articles I read and who I have a lot of respect for suggested that WordPress is not suited to MVC and that the filters and hooks system(call it an event system, or an implementation of the observer pattern if you so wish) kind of negated the need for using MVC.
To be fair he did say that MVC is just one approach and that on other platforms it may be highly appropriate, but just not for WordPress. I think he had a fair point when it comes to theme development, but I do not think the point is as applicable to writing WordPress plugins.
My background is working with Microsoft technologies, VB6 and .Net. Now if you are not familiar with those languages I will just elaborate a little on one form of communication between code modules is achieved. In this system are a specialised set of function pointers(delegates) which an object exposes. Another object will register itself with the target object, saying it is interested in a certain operation happening. When the target object does the operation, it sends a message using the delegate to all those objects which have registered an interest in the operation. The listening objects can then act on the message.
WordPress implements the same idea using it’s system of Hooks & Filters.
Now in my mind this is a communication system. It allows greater decoupling between objects which need to act in a co-ordinated way.
MVC, or any flavour of it such as Model-View-Presenter or Model-View-ViewModel for example is a way of decoupling the user interface from the other logic in your application.
I can see that when writing a theme implementing MVC doesn’t quite fit with the WordPress theme model. However when writing a WordPress plugin it is not too tricky to implement a system for using MVC. In fact I have written about it here.
In my opinion it is better to us MVC in your plugins than mixing HTML and PHP in your logic layer. This just makes the plugin harder to maintain and gives a greater chance of bugs in your plugin. Saying all that I do have to agree with Tom that whatever approach you take there is rarely an either or situation. There are a lot of grey areas when designing a solution and as always by using decoupling and SOLID techniques you can make your plugin much more maintainable.