استفاده از DTO های مختلف

سوال شده توسط: bzmind ‌

تاریخ ثبت: ۱۴۰۱/۰۲/۰۵

بازدید: 414

پاسخ: 6

تگ: Asp.net Core


سلام استاد اشرافی عزیز، استاد اگه مثلا ما توی یه سایت فروشگاهی بیایم تو صفحه اصلی محصول، موقعی که کوئری میزنیم، بریم کل اطلاعت یه محصول رو بیاریم، چه بسا بیشتر، (ینی با استفاده از Dapper بریم جوین بزنیم با اطلاعات یه سری table دیگه) و همه اینها رو توی قالب یه DTO در بیاریم، بعد بعدا که میخوایم یه لیست از کُلی محصول رو به یوزر نشون بدیم، دیگه اون موقع نباید از این DTO استفاده کرد دیگه درسته؟ یعنی باید یه DTO مختصر تر بسازیم فقط واسه اطلاعاتی که میخوایم تو لیست نمایش بدیم؟ ینی اینکار درسته که چنتا DTO مختلف بسازیم واسه یه آبجکت؟ بعد من این رو با ViewModel ها یکم قاطی کردم، پس وظیفه ViewModel چی بود؟ فک کنم یه چیزی شبیه به همین بود، که جاهای مختلف، دیتا رو یجور دیگه نمایش بدیم یا یه همچین چیزی، بعد ما بیایم DTO های مختلف بسازیم، به این معنی نیست که داریم همون کار ویومدل رو میکنیم؟ کلا یه توضیحی بدید ممنون میشم.

پاسخ ها
user

محمد اشرافی

سلام عزیزم سلامت باشید ، ببینید هم DTO و هم ViewModel کارشون یکیه فقط اسمشون فرق داره و چون ViewModel اسمش مربوط به لایه Ui ه پس توی Ui ازش استفاده میشه ، هر 2 تاشون کارشون انتقال یه دیتا از یه جا به جای دیگه است

-------------------------------------------------

ViewModel زمانی استفاده میشه که لازم باشه توی View اطلاعات مختلفی رو نمایش بدین ، ( در صورتی که Dto اون داده های لازم رو نداشته باشه یه ViewModel برای صفحه میسازیم ) 

ViewModel ها توی Form ها هم خیلی کاربرد دارن که توش از DataAnnotation هم استفاده میکنیم

 

این 2 تا هیچ چیز عجیبی نیست فقط یه کلاس معمولی ان ، هیچ منطق خاصی هم ندارن فقط یه اسم ان

 

user

bzmind ‌

ممنون، بعد سوال اصلیم این بود که الان میتونم برای قسمت های مختلف وبسایت، از DTO های مختلف برای یه انتیتی استفاده کنم؟ مثلا موقع نشون دادن خود صفحه اصلی محصول یه DTO کامل داشته باشم، ولی موقع نشون دادنش به صورت لیست و به تعداد زیاد، اون موقع از دیتابیس اطلاعاتو داخل یه DTO که مختصر تر هست بیارم، چون توی نمایش لیستی، ما مثلا به مشخصات و توضیحات یه محصول که نیازی نداریم.

user

محمد اشرافی

هر چنتا که بخواین می تونید  بسازید ، مثلا برای Filter کردن توی ادمین یه Dto احتیاجه ، برای فیلتر کردن توی صفحه محصولات یه Dto دیگه ، هرچنتا که لازمه می تونید بسازید ( برای بهینه تر شدن Query ها )

user

bzmind ‌

آها خیلی ممنون استاد.

راستی قالب جدید سایت هم مبارک 😁

user

bzmind ‌

استاد ببخشید 😂

یه سوال دیگه پیش اومد، الان اگر با انتیتی فریمورک کوئری بزنیم روی یه محصول، این میره همه اطلاعاتشو میاره دیگه، بعد اگر ما Map کنیمش به یه DTO با اطلاعات کمتر، فقط اون اطلاعات اضافی رو دور ریختیم، ینی حجم کوئریمون مثل قبله، انتیتی فریمورک رفته آوردش بالاخره، فقط ما ریختیمش دور.

پس یعنی باید واسه DTO های خاص که پراپرتی هاشون کمتره، حتما کُد SQL بنویسیم با Dapper دیگه درسته؟

user

محمد اشرافی

🤣 ممنون قابلتون و هم نداری 🤣🙈

نه خود Ef هم اگر قبل از گرفتن دیتا از دیتابیس از Select استفاده کنید میره فقط اون چیزایی که لازمه رو میاره مثلا : 

var result=context.Users.where(r=>r....).select(s=>new test()).ToList();

البته برای اینکه مطمعا بشید روی این موضوع یه همچین کدی بنویسید و SqlProfiler رو هم باز کنید ببینم چه کدی اجرا میشه روی دیتابیس

برای ثبت پاسخ باید خود شوید

محبوب ترین مقالات