MVVM Vs MVP Vs MVC
MVVM Vs MVP Vs MVC
HOME
RESUME
CONTACT
21 COMMENTS
For the consicise explanation, see MVVM vs MVP vs MVC: The concise explanation
RELATED (DESIGN)
Solving Traveling Salesman with Ant Colony
Optimization in JavaScript
Those who know me know that I have a passion for software architecture and after developing projects using Model-ViewViewModel (MVVM), Model-View-Presenter (MVP), and Model-View-Controller (MVC), I finally feel qualified to talk about the
differences between these architectures. The goal of this article is to clearly explain the differences between these 3
architectures.
Contents [hide]
1 Common Elements
1.1 Model
1.2 View
POPULAR POSTS
4 Final notes
Common Elements
First, the lets define common elements. All 3 of the architectures are designed to separate the view from the model.
Model
Domain entities & functionality
Knows only about itself and not about views, controllers, etc.
For some projects, it is simply a database and a simple DAO
For some projects, it could be a database/file system, a set of entities, and a number of classes/libraries that provide
additional logic to the entities (such as performing calculations, managing state, etc)
Implementation: Create classes that describe your domain and handle functionality. You probably should end up with a set
of domain objects and a set of classes that manipulate those objects.
View
Implementation: HTML, WPF, WindowsForms, views created programmatically basically code that deals with display only.
http://joel.inpointform.net/software-development/mvvm-vs-mvp-vs-mvc-the-differences-explained/
ABOUT
1/7
2/3/2014
Thin layers
They communicate with the model and the view
http://joel.inpointform.net/software-development/mvvm-vs-mvp-vs-mvc-the-differences-explained/
2/7
2/3/2014
The views datacontext is set to the ViewModel. The controls in the view are bound to various members of the
ViewModel.
Exposed ViewModel proproperties implement some sort of observable interface that can be used to automatically update
the view (With WPF this is INotifyPropertyChanged; with knockoutjs this is done with the functions ko.observable() and
ko.observrableCollection())
http://joel.inpointform.net/software-development/mvvm-vs-mvp-vs-mvc-the-differences-explained/
3/7
2/3/2014
MVC
Use in situations where the connection between the view and the rest of the program is not always available (and you
cant effectively employ MVVM or MVP).
This clearly describes the situation where a web API is separated from the data sent to the client browsers. Microsofts
ASP.NET MVC is a great tool for managing such situations and provides a very clear MVC framework.
Final notes
Dont get stuck on semantics. Many times, one of your systems will not be purely MVP or MVVM or MVC. Dont worry
about it. Your goal is not to make an MVP, MVVM, or MVC system. Your goal is to separate the view, the model, and
the logic that governs both of them. It doesnt matter if your view binds to your Presenter, or if you have a pure
Presenter mixed in with a bunch of ViewModels. The goal of a maintainable project is still achieved.
Some evangelists will say that your ViewModels (and Presenters) must not make your model entities directly available
for binding to the view. There are definitely situations where this is a bad thing. However, dont avoid this for the sake of
avoiding it. Otherwise, you will have to constantly be copying data between your model and ViewModel. Usually this is
a pointless waste of time that results in much more code to maintain.
In line with the last point, if using WPF it makes sense to implement INotifyPropertyChanged in your model entities.
Yes, this does break POCO but when considering that INotifyPropertyChanged adds a lot of functionality with very little
maintenance overhead , it is an easy decision to make.
Dont worry about bending the rules a bit so long as the main goal of a maintainable program is achieved
Views
When there is markup available for creating views (Xaml, HTML, etc), some evangelists may try to convince
developers that views must be written entirely in markup with no code behind. However, there are perfectly
acceptable reasons to use the code behind in a view if it is dealing with view related logic. In fact, it is the ideal
way to keep view code out of your controllers, view models, and presenters. Examples of situations where you
might use the code behind include:
Formatting a display field
Showing only certain details depending on state
Managing view animations
Examples of code that should not be in the view
Sending an entity to the database to be saved
Business logic
Happy coding.
Tags: programming, software design
21 Comments
+ ADD COMMENT
REPLY
Hey joel,
Thanks for the fantastic article. Can we adopt a model which will be same for web and windows by just replacing the
presentation Layer?
REPLY
Yes, your model is independent of the views and the Controllers/Presenters/ViewModels so you should
always be able to use the same model for multiple view methodologies. If you are planning on having similar
functionality in the windows and web apps, you likely will even be able to share the ViewModels/Presenters.
REPLY
Nice And Easy to understand article Joel, Clearing almost all doubts about MVC-MVP-MVVM.
REPLY
I was confuse with the real differences between MVP, MVC and MVVM and your article has cleared my doubts.
Thanks Joel!
http://joel.inpointform.net/software-development/mvvm-vs-mvp-vs-mvc-the-differences-explained/
4/7
2/3/2014
REPLY
Its really impressive and to the point article. Cheers for sharing it.
I have a little doubt and wanted to ask to get more idea.
First, you mentioned that in MVP, you said, There is a single presenter for each view, cannt we have to use say
more than one presenter for the same View?
My main question is actually on MVC, can you give me an example of a controller will choose a view Is this about
page redirecting? Sorry if this is silly question but, i want to understand it well.
Thanks for your time and keep posting your good work!
REPLY
In MVP, I dont see how you could really have more than one presenter in each view. There are always
variations but Im not sure that I would call that variation MVP. However, you can always have a view that is
made up of multiple sub views. Each subview can be separately defined and each will have its own presenter.
This situation occurs a lot in MVP. For example, you might have a tab that has a member profile view and a
members recent posts view. In this case, I could see having a custom UserControl for the member profile
and a custom UserControl for the recent posts. Each of these could have their own presenters and be
combined in the tab view.
As for your MVC question, it sounds a bit like it is about redirectinghowever, redirecting would change the
URL. What you are really doing is supplying the appropriate content (view html) for a given url. One controller
would handle this functionality for a set of related views. Does that answer your question?
REPLY
REPLY
REPLY
Hi,
This is such a nice, and precise explanation of three patterns. I have a query though and
possibly you can help me. I am developing an Desktop Client and Web application. I intend to use WPF (and
MVVM) to develop desktop client and ASP.Net MVC for web app.
I have never used ASP.Net MVC before although I have never truly liked Web Forms (except some features like
Master Page, output Cache etc.) and I mostly use
AJAX (jQuery), and handlers to populate HTML and processing inputs (I think I was
close to MVC after reading about the pattern but in a different way).
Now this application will mostly have same inputs, reports, and database. I am planning to create Model that can be
re-used in MVVM and MVC both. But after reading your article, analysis of ASP.Net MVC Code, I doubt that it could
be done. In MVVM, View never knows Model while in MVC, Controller shares Model with View. Also, in ASP.Net
MVC, a View (ASPX file) is derived from System.Web.Mvc.ViewPage and the labels/captions are populated from
Model itself.
Is there a way I can use same Model for both applications?
Thank you.
http://joel.inpointform.net/software-development/mvvm-vs-mvp-vs-mvc-the-differences-explained/
5/7
2/3/2014
REPLY
Hi Joe,
This is a wonderful,specific topic and not much and not less.
You clearly mentioned the points of use of each pattern.
Thanks a lot..
REPLY
REPLY
Thanks,
Now this helped me putting down my final yes on knockoutJS framework for my new HTML5, JavaScript based
application.
REPLY
Nice summary. I disagree with one of the assertions, however. With MVVM, you dont need to have one VM per
view. Multiple views can be data bound to the same view model. This is very helpful when you have multiple
visualizations for the same core data that need to be kept in-sync.
REPLY
Excellent article simple and very logic, clarifying all three patterns
REPLY
Very well explained!!It satisfies most of our doubts about these patterns.
REPLY
REPLY
Well said. I will try to find a way to update the wording. Domain seems to imply something in the service tier
and not the web tier so I will try to find a more appropriate term. One issue is that the term ViewModel is a
loaded term with multiple meanings. One, is from the concept of ViewModel as described by MVVM. In this
case, the ViewModel responds to changes in the view and forwards them to a model representation that more
accurately represents the business concepts (The M that I describe as the domain model). The other way
people use the term is when they think of models associated with the web tier (and call them view models). I
think this is how you use the term ViewModel but when using it this way, it leaves part of MVVM undefined.
REPLY
REPLY
Hi Joel,
Very nice and concise description. You have cleverly illustrated the difference in all the three patterns. However, the
http://joel.inpointform.net/software-development/mvvm-vs-mvp-vs-mvc-the-differences-explained/
6/7
2/3/2014
REPLY
Depending on how you consider system interaction, you could very well be correct here. When thinking of a
web based MVC framework, I think like to think Im interacting with the controllers directly through the view
(since by making changes to the view I am influencing the actions in the controller). However, this is a bit of a
simplification since I could actually just send the proper HTTP request directly to the server (and controller)
without having to go through the view. I personally find thinking of going through the view as a little more clear
for my case since I actually interact through the view but I can understand why some people may have
different ways of considering this part. This point doesnt seem to have a big overall impact on how I consider
these types of frameworks but perhaps my opinion will change after I think on it some more. Thanks for
sharing.
Website
Comment
POST COMMENT
Favourite Links
Best way to find bugs in your code
Don't call yourself a programmer
Google Finance
Our Signal
Programmer Competency Matrix
Stack Overflow
Stock Options Manager
Wikipedia
http://joel.inpointform.net/software-development/mvvm-vs-mvp-vs-mvc-the-differences-explained/
7/7