Как вы прочитали, DTO
является «Объектом передачи данных».
Грубо говоря Data
является одним из аспектов объекта, другой Behavior'. 'Behavior
снова свободно говорить просто набор связанных действий (методы) и события, которые действуют на этот Data
.
Таким образом, объект представляет собой контейнер для некоторых данных и кучу поведения, которые связаны с этими данными. DTOs
и ViewModels
- оба объекта, но они имеют разные цели в жизни и, как результат, имеют различный акцент на поведении, которое они содержат.
A DTO
относится только к Transporting
данных между, например, границами процессов, уровнями приложений или сетями.
В результате DTOs
часто имеют малое поведение, потому что поведение - это действия и действия полезны только тогда, когда мы хотим что-то сделать с данными.
Поскольку транспорт/сериализация имеет транспортные расходы, мы обычно просто хотим, чтобы эти DTO
s были скудными и средними.
Однако, как только DTO
приземляется в пункте назначения, мы обычно хотим что-то сделать с содержащимися в нем данными. Таким образом, мы очищаем данные из DTO
, что очень важно для хорошо выполненной работы по его получению и закладывает его в ViewModel
, поэтому мы можем каким-то образом взаимодействовать с данными с помощью поведения (методов и событий), как правило, через некоторый интерфейс ,
Так поведения являются такими вещами, как форматирование значения при редактировании/сохранить, вызвав изменения в propertyB на основе обновленного значения в propertyA и т.д.
INotifyingPropertyChanged
интерфейса (INPC) часто будет осуществляться на ViewModel
, чтобы помочь с этим.
Так как поведение - это просто параметры для взаимодействия с данными (свойствами, методами, событиями), ViewModels
имеют это, потому что это то, для чего мы создаем представления для взаимодействия с данными. DTOs, с другой стороны, часто/обычно не имеют (много) поведения, потому что их функция - это не взаимодействие.
Спасибо @rism, я понял это сейчас. – CoderRoller