اگر با MVVM آشنایی داشته باشید حتماً متوجه شباهت زیاد ViewModel با DTO شده اید.
البته میدانیم که ViewModel در WPF شامل رفتار اشیاء هم میتواند باشد اما DTO به هیچ عنوان دربرگیرنده رفتار اشیاء نیست.
به نظرم DTO بیشتر از اینکه به ViewModel شبیه باشد به Model در MVVM شبیه است.
Model در MVVM را میتواند معادلی برای ViewModel در MVC قرار داد و ViewModel در MVVM را میتوان شبیه Controller در MVC در نظر گرفت.
به نظر من تفاوتی که DTO با ViewModel دارد این است =>
کلاس StudentService نیاز به اطلاعات موجودیت Teacher از جمله نام و شماره شناسنامه دارد . در نتیجه باید متدی در TeacherService فراهم شود که این اطلاعات را تامین کند :
public class TeacherService
{
internal IEnumerable<TeacherDto> GetTeachers ()
{
return ...
}
}
چون متد بالا قرار نیست اطلاعاتی را به لایهی نمایش پاس دهد و اطلاعات مستقیما در یک متد سرویس استفاده میشود خروجی آن Dto تعیین شده.
به نظر من این قواعد وحی منزل نیست ، به عنوان مثال شاید شخصی در طراحی خود از DTOها به عنوان اعضای ViewModelها استفاده کند یا DTO را به Presentation layer برگرداند و آن را به ViewModel نگاشت کند.
اما در نهایت پاسخ من به این نظرسنجی گزینهی خیر است.