I would just like to add that for small projects, it is okay to just have your own ViewModel and work with that. You can later you can separate the entity if it calls for it.
To many developers adding new layers without weighing in the pros and cons, later they start noticing the lag then doubts happen. MVC itself is already a separation-of-concern.
Having a separate DomainEntity solves a different problem where the UI no longer maps 1-to-1 to the an entity, consider the following.
Version 1
Domain | Presentation
--------------------------------
User.FirstName | User.Name
User.LastName |
User.PositionTitle | User.PositionTitle
The example demonstrates that the domain and the presentation are no longer mapped 1-to-1. In the future, you might have domain modifications such as the following:
Version 2
Domain | Presentation
--------------------------------
User.FirstName | User.Name
User.LastName |
Position.Title | User.PositionTitle
Based on the example above (version 2), notice that the presentation was not modified. Having a separated domain model improves the interface stability. It can even decrease the cost of changes for refactoring scenarios.
Advantage of the ViewModel
The beauty of ViewModel is that it decouples your domain from the presentation, this benefit is more obvious when employed in large projects, where different developers handle different parts of the system (separate GUI team for example)
one small change requires changes to many classes.
This is one of the disadvantage of decoupling your entities, it creates duplication of code. The extra coding has a huge cost and the benefits has to be evident to be worth it.