ورود

View Full Version : تفاوت Model و ViewModel



sunn789
شنبه 17 خرداد 1393, 15:27 عصر
سلام دوستان
من الان 10 ساله مثلاً ، ثلاً برنامه نویسی میکنم (که به نظرم همش اشتباهه)بگذریم شوخی بود
یه نفر میخوام بدون استفاده از اصطلاحات ترجمه شده و قلنبه تفاوت model و ViewModel رو بهم بگه
چرا؟
اها مصلاً شمااگر چه با Identity 1 یا هرچی یه پروژه Mvc را ایجاد کنید یه کلاس account view model دارین !! چرا
یا مثلاً االان اگر با identity 2 پروژه ایجاد کنید کلی ViewModel براتون میساره مثلاً توی AccountView model داریم پ
ExternalLoginListViewModel
SendCodeViewModel
VerifyCodeViewModel
ForgotViewModel
و....

خوب حالا توی بیشترش
[Required]
[Display(Name = "Email")]
[EmailAddress]
public string Email { get; set; }

[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
رو داریم تا اینجا درست ؟
حالا اگر شما بخواهید یه تاریخ تولد به ثبت نام اضافه کنید فقط کافیه توی Idenity Model اونو اضافه کنید !
این هم درست
من fhdn همزمان viewModel ها رو هم تغیر بدم و View از View model میخونه نه از model در صورتی که در حالت عادی sccafold از model ساخته میشه نه view model
یکی بیشتر و فارسی منو توجیه کنه
مثلاً من استفاده از Ienumrable , و استفاده از اینتر فیسها رو راستی زاستی فقط از طریق ارتباط میدونستم اما توی یه مثلالی یکی از دوستان تو همین تالار زد تازه فهمیدم چرا از اینتر فیس استفاده میکنن
راستی سخت نگیرین من رشته تحصیلیم ربطی به It و کامپیوتر نداره (اوایل زمانی میگفتن "متغیر" تعجب میکردم و نمیدونستم چیه )، هر چمد حالا هم هیچی نمیدونم.
پیش اپیش متشکر

h_moradian
شنبه 17 خرداد 1393, 17:15 عصر
اول یه کم ادبیاتت رو قویتر کن! چرا اینقده پرت و پلا نوشتی؟ (اول متنت رو به فارسی سلیس ترجمه کن دوست من)

helpsos
شنبه 17 خرداد 1393, 17:23 عصر
سلام
ببین طبق تحقیقاتی که من داشتم و توی این 2 ماهه به لطف پروژه پایان ترمم با این اصطلاحات آشنا شدم :
ما مثلا در مدل کاربر 5 تا فیلد داریم . حالا برای ویوی لاگین فقط به نام کاربری و رمز احتیاج داریم پس :
1- از لحاظ امنیتی لازم نیست که همه ی فیلدهای مدل را به ویو ارسال کنیم که بهش میگن Mass Assignment یعنی اگه یه فیلد توی مدل داشته باشی که اسمش باشه IsAdmin هکر می تونه با ویو اطلاعاتی را به کنترلرت ارسال کنه که isAdmin هم توش True شده و حالا یه کاربر ساده به عنوان مدیر وارد شده . البته این یه مثال است.
2-حجم داده های رد و بدل شده بین مدل و ویو کمتر میشه(خب اینم که مسلماَ واضحه)
3-در زمان اضافه کردن و ویرایش کردن اطلاعات خیلی بهت کمک می کنه.
4-می تونی مثلا یه فیلد که برای واحد پول در نظر گرفته شده است را در ویومدل 3 رقم 3 رقم جدا کنی
5-می تونی برای فیلد هات قالب مشخص کنی.
N- می تونی .....

البته می دونم که همه اینا رو خودت بلتی!:چشمک:

kavayo
شنبه 17 خرداد 1393, 18:49 عصر
model ها یک کلاس ساده ای است که معرفی یک سری فیلد ها رو برعهده دارد در حالی که viewmodel یک کلاس model ای از view است که نحوه نمایش فیلدها در view و نحوه ارتباط انها با دیتابیس رو برعهده دارد

sunn789
شنبه 17 خرداد 1393, 20:43 عصر
سلام
ببین طبق تحقیقاتی که من داشتم و توی این 2 ماهه به لطف پروژه پایان ترمم با این اصطلاحات آشنا شدم :
ما مثلا در مدل کاربر 5 تا فیلد داریم . حالا برای ویوی لاگین فقط به نام کاربری و رمز احتیاج داریم پس :
1- از لحاظ امنیتی لازم نیست که همه ی فیلدهای مدل را به ویو ارسال کنیم که بهش میگن Mass Assignment یعنی اگه یه فیلد توی مدل داشته باشی که اسمش باشه IsAdmin هکر می تونه با ویو اطلاعاتی را به کنترلرت ارسال کنه که isAdmin هم توش True شده و حالا یه کاربر ساده به عنوان مدیر وارد شده . البته این یه مثال است.
2-حجم داده های رد و بدل شده بین مدل و ویو کمتر میشه(خب اینم که مسلماَ واضحه)
3-در زمان اضافه کردن و ویرایش کردن اطلاعات خیلی بهت کمک می کنه.
4-می تونی مثلا یه فیلد که برای واحد پول در نظر گرفته شده است را در ویومدل 3 رقم 3 رقم جدا کنی
5-می تونی برای فیلد هات قالب مشخص کنی.
N- می تونی .....

البته می دونم که همه اینا رو خودت بلتی!:چشمک:
سلام
یک دنیا متشکر
ما هنوز شاگردیم داریم درس یاذ میگیریم از راهنمایی ها متشکر ، پس با این وضعیت بهتره از اون view هایی که خود Mvc ایجاد میکینه استفاده نکنیم ، یا دنیال یه را ه حل دیگه باشیم بیاییم از اون view ها استفاده کنیم بعد ViewModel رو اضافه کنیم و به Model ربتش بدیم به نظر شما ها امکان پذیره ، چون اگر از View های خود MVC استفاده کنیم زمان خیلی به نفعمونه و کلی تو کد نویسی پیش افتادیم ، در این مورد نظرتون چیه ؟
ام ایه مطلب دیگه اینها که شما فرمودین منافع استفاده از ViewModel است اما من میخوام structure در ViewModel رو بدونم اینکه تک تک فیلدهای Model چه جوری با فیلدهای ViewModel ارتباط برقرار میکنه ، و ایا چه طوری میشه مثلاً توی model 10 تا فیلد داشت و لی توی viewModel 5 تا و این فقدان رو کجا میشه جبران کرد ، من اینها رو توی mvc بدون view Model میدونم اما با اضافه کردن viewmodel یه کم سخت میشه و چون میدونم داریم به این سمت کوچ میکنیم، بهتره بیشتر و بیشتر از این استفاده کنیم و اگر بتر رو بدونیم سرعت ارائه نرم افزار بدون عیبو نقص بیشتر میشه ،
با هم تشکر

sunn789
شنبه 17 خرداد 1393, 20:49 عصر
model ها یک کلاس ساده ای است که معرفی یک سری فیلد ها رو برعهده دارد در حالی که viewmodel یک کلاس model ای از view است که نحوه نمایش فیلدها در view و نحوه ارتباط انها با دیتابیس رو برعهده دارد

من واقعاً ممنونم اما عزیز ذل من یه چیزی ساده تر و بیشتر از این میخوام ، قبلاً با MVVM هم ، تو پروژه های سیلور لایت وWPF هم اشنا شده بودم ، اما تو اون زمان جوونی ما ماکروسافت به طور رسمی تو پروژه ها اضافش نمیکرد.
و بعد از کار کردن با telerik , ... و دیگر کامپوننتها به این نتیجه رسیدم واقعاً تو پروژه باگ های نا خوسته ای اضافه میکنن، و بهترین ایتم اینه که از خود اونچه اکروسافت گذاشته استفاده کرد که به تازگی همینجور که من گیر کردم بیشتر از الگوی \ViewModel استفاده میکنه

helpsos
یک شنبه 18 خرداد 1393, 23:37 عصر
پس با این وضعیت بهتره از اون view هایی که خود Mvc ایجاد میکینه استفاده نکنیم ، یا دنیال یه را ه حل دیگه باشیم بیاییم از اون view ها استفاده کنیم بعد ViewModel رو اضافه کنیم و به Model ربتش بدیم به نظر شما ها امکان پذیره ، چون اگر از View های خود MVC استفاده کنیم زمان خیلی به نفعمونه و کلی تو کد نویسی پیش افتادیم ، در این مورد نظرتون چیه ؟
دقیقا من هم همین کار رو می کنم اول ویو رو با مدل می سازم بعد خط اولش که رو به ویو مدل وصل می کنم.


تک تک فیلدهای Model چه جوری با فیلدهای ViewModel ارتباط برقرار میکنه
می توانی به صورت دستی این کار رو انجام بدی یعنی فیلد به فیلد یا اینکه از AutoMapper استفاده کنی.


چه طوری میشه مثلاً توی model 10 تا فیلد داشت و لی توی viewModel 5 تا و این فقدان رو کجا میشه جبران کر
ببین چون فیلدهارو به صورت nullable تعریف می کنیم پس می توان هر کدام را که می خواهیم مقدار دهی کنیم و بقیه هم null میگیره که مشکلی پیش نمیاد.

sunn789
سه شنبه 20 خرداد 1393, 10:13 صبح
من بادم هست توی ؤُ 2003 اگر Null برای ستونها تعریف میکیدیم خواندن ستونهای null با Stored procedure دستورات اضافه ای میخواست از اون زمان به بعد من تا به حال تامی فیلدها رو مگر جای که دیه راه حلی نداشته باش Null نمیگذارم
اما از راهنمایی تون خیلی ممنونم اگا باز هم نکته ای بود که یتونست کمک کنه ممنون میش همینجا بگذارید

sunn789
پنج شنبه 22 خرداد 1393, 23:57 عصر
دوستان یه مطلب من به تازگی مشکل دارم شاید بس که ساده است من نمیگیرم
زمانی یه پروژه ایجاد میکنید توی پوشه مدل AccountViewModels.csو IdentityModels اینها همه وییو مدل هستن پس مدلهاشون کجان؟ و کجا به DBContext تعریف میکنه که زمانی که اولین بار هست برنامه رو اجرا میکنیم بانک رو بسازه چون زمانی خودمون مدل رو ایجاد میکنیم از DbSet استفاده میکنیم اما تو این دو تا کلاس Dbset رو نمیبینیم ؟

mohsen_1687
دوشنبه 26 خرداد 1393, 00:52 صبح
توی یکی از کلاسها هست

sunn789
شنبه 31 خرداد 1393, 19:12 عصر
توی یکی از کلاسها هست

سلام فکر کنم قبلاً یه ادرس کلاس بود اما الان نیست ، مشه ادرس این دوره رو دوباره بدین؟

h_moradian
یک شنبه 01 تیر 1393, 14:32 عصر
http://www.dotnettips.info

sunn789
یک شنبه 01 تیر 1393, 18:46 عصر
میشه بفرمایید تو کدوم دوره ؟