В чем разница между DTO объектами и ViewModel, например в ASP.NET MVC?

275 views
Skip to first unread message

azzatey

unread,
Aug 31, 2012, 4:29:42 AM8/31/12
to dotne...@googlegroups.com
Пишу веб приложение с использованием DDD, но видимо не совсем правильно понял суть использования объектов DTO, в связи с этим возникли кое-какие вопросы.
Должны ли объекты DTO напрямую использоваться вьюхами (и хранить в себе дополнительные данные, например, какой-либо флаг, который хранит состояние чек бокса из View) или они должны инкапсулироваться в каком-либо ViewModel?
Спасибо.

Max Kvt

unread,
Aug 31, 2012, 4:43:08 AM8/31/12
to dotne...@googlegroups.com
DTO ведь только для передачи данных? 

31 августа 2012 г., 14:29 пользователь azzatey <azz...@gmail.com> написал:
Пишу веб приложение с использованием DDD, но видимо не совсем правильно понял суть использования объектов DTO, в связи с этим возникли кое-какие вопросы.
Должны ли объекты DTO напрямую использоваться вьюхами (и хранить в себе дополнительные данные, например, какой-либо флаг, который хранит состояние чек бокса из View) или они должны инкапсулироваться в каком-либо ViewModel?
Спасибо.

--
 
 
 

Azat Sattarov

unread,
Aug 31, 2012, 6:14:38 AM8/31/12
to dotne...@googlegroups.com
Ну по идее да, т.е. для переброски данных с доменного слоя на UI

пятница, 31 августа 2012 г., 12:43:08 UTC+4 пользователь Max написал:

Max Kvt

unread,
Aug 31, 2012, 6:51:41 AM8/31/12
to dotne...@googlegroups.com
Опять же я DTO использую, только чтобы передать данные от клиента на сервер и все. ASP.NET приложения не разрабатывал, только Win Apps, либо Web services

31 августа 2012 г., 16:14 пользователь Azat Sattarov <azz...@gmail.com> написал:
--
 
 
 

Евгений Сверчков

unread,
Aug 31, 2012, 8:01:33 AM8/31/12
to dotne...@googlegroups.com

DTO используется для передачи данных по сети для того чтоб минимизировать передаваемый объем данных. Если ты по сети будешь передавать только html то лично я не вижу смысла в объектах DTO. Если ты будешь передавать XML или JSON то в этом случи, возможно, понадобятся DTO.


Не усложняй себе жизнь. "Ведь разработка ПО это борьба со сложностью". Выкинь все что ты не используешь в данный момент и будет тебе счастье.



31 августа 2012 г., 16:51 пользователь Max Kvt <max...@gmail.com> написал:
--
 
 
 

Андрей Чистяков

unread,
Aug 31, 2012, 11:20:40 AM8/31/12
to dotne...@googlegroups.com
Как уже писали, DTO для передачи данных, VM - для отображения в UI. По-моему, каких-то строгих ограничений типа "DTO нельзя использовать для вьюх" нет, нужно просто руководствоваться здравым смыслом и соображениями читабельности кода. Грубо говоря, если смотрим в исходник и видим в названии класса "DTO" - ага, сразу понятно, значит что-то куда-то передается; если в названии "ViewModel" - скорее всего это связано с UI. Такой подход сильно помогает разбираться в коде. Но вообще все зависит от ситуации, если DTO подходит для отображения в UI, незачем усложнять и делать еще и отдельную вью-модель.
Кроме того, у меня обычно естественным образом получается, что VMы в основном состоят из строк (ну или других типов данных, типа DateTime, которые можно напрямую без конвертаций показывать в контролах), а DTO, которые служат для транспорта данных, состоят из более компактных (например в DTO можем передавать int UserID, на основе которого уже построим VM с полями Name, Department, и т.д.)
Все вышенаписанное - исключительно мое личное мнение, не претендует на истину в последней инстанции, с удовольствием выслушаю альтернативные точки зрения.

Azat Sattarov

unread,
Aug 31, 2012, 12:02:56 PM8/31/12
to dotne...@googlegroups.com
Спасибо, вроде все стало на свои места теперь.

31 августа 2012 г., 19:20 пользователь Андрей Чистяков <ogi...@mail.ru> написал:

--
 
 
 



--
Regards,
Azat Sattarov

Reply all
Reply to author
Forward
0 new messages