اگر در پروژههایت با لایهبندی سر و کار داشته باشی، احتمالاً دو اصطلاح DTO و ViewModel به گوشت خورده است.
در این مقاله قصد داریم به بررسی جزئیات و تفاوتهای آنها بپردازیم.
DTO چیست؟
DTO یا همان Data Transfer Object یک شیء سبک و ساده است که فقط برای جابهجایی داده بین لایهها ساخته شده است. نه قرار است در UI نمایش داده شود و نه قرار است منطق خاصی داخل آن باشد.
فرض کن یک API نوشتهای که باید اطلاعات یک محصول را برگرداند. معمولاً کل موجودیت (Entity) محصول را ارسال نمیکنیم، چون هم حجم داده بالا میرود و هم ممکن است اطلاعات حساسی ناخواسته فاش شود.
در عوض یک DTO تعریف میکنیم:
public class ProductDto
{
public int Id { get; set; }
public string Name { get; set; }
}
// وظیفهاش فقط جابهجایی داده بین Service و Controller یا API است
ViewModel چیست؟
ViewModel زمانی استفاده میشود که بخواهیم دادهها را برای نمایش در View آماده کنیم؛ یعنی همان جایی که کاربر قرار است اطلاعاتی را ببیند.
ViewModel میتواند ترکیبی از چند منبع مختلف باشد، میتواند شامل لیستهایی برای DropDown باشد یا فیلدهای کمکی داشته باشد؛ هر چیزی که برای نمایش بهتر در UI نیاز است.
به این مثال توجه کنید:
public class ProductViewModel
{
public string Name { get; set; }
public string CategoryName { get; set; }
public List Categories { get; set; }
}
نتیجهگیری کلی
- DTO برای «رد و بدل کردن دادهها» ساخته شده است
- ViewModel برای «نمایش بهتر دادهها» در UI طراحی شده است
هر کدام جای خودشان را دارند. استفادهٔ درست از آنها باعث میشود کد تمیزتر و نگهداری آن راحتتر شود.