DTO = ViewModel?

I’m using NHibernate to persist my domain objects. To keep things simple I’m using an ASP.NET MVC project as both my presentation layer, and my service layer.

I want to return my domain objects in XML from my controller classes. After reading some posts here on StackOverflow I gather DTOs are the way to go. However, I’ve also come across posts talking about the ViewModel.

My question: Are Data Transfer Objects and ViewModels the same thing? Or is a ViewModel a kind of sub pattern of a DTO?

Where to convert a DTO to ViewModel?

I’ve inherited an MVC2 project using a pretty standard and decently well kept DDD pattern. I’ve been doing a lot of reading on the whole DTO/ViewModel debate as well. Currently our DTOs are often used

Mapping Subclass OF DTO into ViewModel

My DTO class contains another sub class say, Class ABC_DTO { public String XYZ {get;set;} public BCD_DTO BCD {get;set;} } Class BCD_DTO { public string Name {get;set;} public string Age {get;set;} } /

What’s the difference between Model, ViewModel and DTO? [closed]

I am an ASP.NET MVC developer and I am confused. What’s the difference between Model, ViewModel and DTO (Data Transfer Object)? Is it ok for model to have methods that will save itself to database?

Is it possible to map multiple DTO objects to a single ViewModel using Automapper?

I was wondering if it is possible to map multiple DTO objects to a single ViewModel object using Automapper? Essentially, I have multiple DTO objects and would like to display information from each on

Automapper mapping issue: flattening from DTO to ViewModel works – doesn’t work the other way around

My DTOs (simplified for demonstration purposes): Item (the DTO mapped to my ViewModel in question): public class Item { public Item() { } public virtual Guid ID { get; set; } public virtual ItemType I

AutoMapper issue when mapping back to DTO from ViewModel

Im having a problem in mapping back to DTO. DTO : public class ServiceEntity : BaseChild { public int Id { get; set; } } public class BaseChild { public string FirstName { get; set; } public string La

From the Model to the DTO to the ViewModel seems just too much

I know a DTO is not a ViewModel. The usage can be the same when its misused but the origion purpose is different. I return domain entities from my Repository to the Service. In my Service I have to re

Are there Visual Studio Tools For Creating DTO/ViewModel

I’m trying to introduce ASP.Net MVC to my department. I am encouraging them to have a ViewModel per View and AutoMapper for our larger projects (and ideally in general). Sometimes this means having on

Best practice with AutoMaping ViewModel (DTO) to Model (Entity)

I’ve happily been using AutoMapper in a few projects and made use of .ReverseMap() when going from ViewModel to Model. I’d typically do the following: // run at startup // I’d customize the mapping if

transfer DTO to ViewModel

Here is my data transfer object public class LoadSourceDetail { public string LoadSourceCode { get; set; } public string LoadSourceDesc { get; set; } public IEnumerable<ReportingEntityDetail> Re

Answers

For some simple views I’ll use my DTO as my models, but as Views become more complex I’ll create ViewModels.

For me it is a balance between quickness (using DTO, since I already have ’em) and flexibility (creating ViewModels means more separation of concerns).

The canonical definition of a DTO is the data shape of an object without any behavior.

ViewModels are the model of the view. ViewModels typically are full or partial data from one or more objects (or DTOs) plus any additional members specific to the view’s behavior (methods that can be executed by the view, properties to indicate how toggle view elements etc…). You can look at the viewmodel as all the data for a view plus behaviors. ViewModels may or may not map one to one to business objects or DTOs.

By the way, NHibernate projections come in handy if a certain viewmodel needs a subset of the data from a persisted object.

DTO != ViewModel

In the MVVM pattern the ViewModel is used to isolate the Model from the View. To represent the Model you could use simple DTO classes, which again is mapped to a database through e.g. NHibernate. But I’ve never seen a ViewModel class which is modelled as a DTO.. ViewModel classes mostly have behavior, which DTOs don’t have.

DTO – Data Transfer Objects are exactly as it says, containers for transferring data. They have no behaviour but merely a bunch of setters and getters. Some people make them immutable and just create new ones when needed rather than updating existing ones. They should be serializable to allow transfer across the wire.

Generally DTOs are used to ship data from one layer to another layer across process boundries as calls to a remote service can be expensive so all the required data is pushed into a DTO and transferred to the client in one chunk (coarse grained).

However, some people use the notion of screen bound DTOs (nothing to do with crossing process boundries). Again these are populated with the required data (generally the data required for a particular screen and could be an aggregation of data from various sources) and sent to the client.

http://blog.jpboodhoo.com/CommentView,guid,21fe23e7-e42c-48d8-8871-86e65bcc9a50.aspx

In simple cases as has already been stated this DTO can be used for binding to the view but in more complex cases it would require the creation of a ViewModel and unloading of data from DTO to ViewModel which is obviously more work (when applying MVVM pattern).

So again as already stated DTO!=ViewModel

and

DTO and ViewModel have different purposes in life

ViewModel in ASP.NET MVC practice is the same as the DTO, however ViewModel in MVVM pattern is different from DTO because ViewModel in MVVM has behaviors but DTO does not have.

First, the major difference is that ViewModel can have behaviour or methods that DTO Must Not !!!

Second, Using DTO as a ViewModel in ASP.NET MVC make your application tightly coupled to DTO and that’s exactly the oppostie purpose of using DTO. If you do so, what’s the diffrence using your domain Model or DTO, more complexity to get an anti-pattern ?

Also ViewModel in ASP.NET can use DataAnnotations for validation.

The same DTO can have diffrent ViewModels Mapping, and One ViewModel can be composed from differents DTO (always with object mapping not composition) . because i think it is even worse if you have a ViewModel that contains a DTO, we will have the same problem.

From your presentation layer, think about DTO as a contract, you will recieve an object that you have to consider as stranger to your application and don’t have any control on it (even if you have ex the service, the dto and presentation layers are yours).

Finally if you do this clean separation, developpers can work together with ease. The person who design ViewModels, Views and Controllers don’t have to worry about the service layer or the DTO implementation because he will make the mapping when the others developpers finish their implementation… He can even use Mocking tool or manual mocking to fill the presentation layer with data for test.

if you will use DTO as ViewModel, that means you are making high dependany on DTO because of some reason you are changing DTO then it could impact on ViewModel.

Better use DTO & convert into viewmodel.