Model و ViewModel چیست؟ Model در یک پروژه ASP.NET Core چه کاربردی دارد ؟ چه زمانی در پروژه از ViewModel استفاده کنم؟
درود ، آرزو ابراهیمی هستم مدرس دوره فیلم اموزش asp.net به زبان فارسی از سایت میزفا و با یک مقاله آموزشی دیگر از سری مقالات آموزش core در خدمت شما دوستان هستم.
مدل (Model) در ASP.NET Core چیست ؟
مدل شامل داده هایی است که کاربر با آن ها سروکار دارد. این داده ها میتوانند داده هایی باشند که خودش از راه واسط کاربری وارد برنامه میکند و یا داده هایی که به او نمایش داده میشود .ولی این داده ها شامل کل داده هایی نمیشود که برنامه به عنوان یک واحد کلی با آن سروکار دارد (Domain Model) .
بنابراین میتوانیم بگوییم دو نوع مدل داریم : Domain Model و View Models
View Models چیست ؟
ویو مدل (ViewModel) داده هایی را در بر میگیرند که بین Controller و View جابه جا میشوند.
Domain Model چیست ؟
مدل دامنه (Domain Model) همه داده های دامین تجاری (Business Domain) پروژه به همراه روش های پردازش آن ها و قوانین حاکم بر سیستم را شامل شده و Model Logic یا در اطلاح فارسی منطق مدل نامیده می شود.
مدل نماینده دنیایی است که برنامه یا پروژه را میسازد. برای نمونه ، در برنامه ای در مورد بانک ، مدل نشان دهندهی همه مفاهیمی مانند حسابها ، انواع آنها ، تسهیلات ، مشتریان و … به همراه عملیات مربوط به آنهاست که در بانک وجود داشته و مورد استفادهی برنامه هستند. افزون بر این ، مدل مسئول حفظ جامعیت ودرستی داده ها هم هست . به عنوان مثال ، این که مشتری نتواند بیشتر از مبلغ حساب خود برداشت کند.
برای هر یک از بخش های تشکیل دهندهی MVc , بایدها و نبایدها را به فرم زیر میتوان برشمرد.
مدل باید:
- داده های دامین را در برگیرد.
- شامل فرایندهای لازم برای ایجاد ، مدیریت و پردازش آن دادهها باشد.
- واسط برنامه سازی مناسبی برای داده های مدل و عملیات روی آنها ارائه دهد.
مدل نباید :
- جزئیات و روش دسترسی به داده های مدل و پردازش آنها را به بیرون از خود ارائه دهد. ( نماها و کنترلرها نباید به داده های مدل و روش های پردازش آن ، دسترسی داشته باشند)
- شامل روش ها یا متدهایی برای تغییر داده های مدل بر اساس اعمال کاربر باشد (این وظیفه ی Controller است)
- شامل روش ها و متدهایی برای نمایش داده ها به کاربر باشد ( وظیفه View است)
یکی از فایده های جداسازی مدل این است که در زمان توسعه ی نرم افزار بتوانید به راحتی منطق برنامه را آزمایش کنید.
بسیاری از افرادی که با MVC آشنا میشوند از وجود منطق برنامه در مدل متعجب میشوند زیرا انتظار دارند هدف MVC جداسازی داده ها از منطق (متدها و فرایندهای پردازش داده ها ) باشد. در حالی که هدف MVC تقسیم پروژه به سه بخش است که هر کدام ممکن است دارای هم داده و هم روش ها و منطق کار بر روی آن داده ها باشد.
به پایان این جلسه آموزشی رسیدیم در صورتی در پیرامون مقالات آموزشی ASP.NET Core MVC سوالی داشتید حتما در انجمن میزفا مطرح کنید.
7 پاسخ
سلام با تشکر از سایت خوب شما. من می خواستم بدانم وقتی ما در یک ویو از یک مدل استفاده می کنیم و تغییرات بسیار کمی وجود دارد یعنی بالای 90 درصد ایتم های مدلمان را در ویو لازم داریم بهتر هست ویو مدل طراحی کنیم یا می توانیم از همان مدل هم استفاده کنیم. آیا ساختن ویو مدل در زمانهای که تغییرات ایتم بسیار کم هست باز هم توصیه می شود؟
سلام ممنونم
زمانی که تغییرات خیلی کم هست می تونید از همون مدل استفاده کنید ولی من توصیه میکنم که از ویومدل استفاده کنید چون پروژه ی شما در حال توسعه است و ممکن است در آینده این تغییرات زیاد شود.
ممنون میشم به سوال من هم در این خصوص جواب بدید
1. چون بعد از هر تغییر در مدل دوباره باید مایگریشن بزنیم
اگر توی مدل data anotation رو تغیر بدیم و چیزی رو کم و زیاد کنیم در این خصوص
باز هم باید مایگریشن بزنیم؟
2. فرض کنید من یه پراپرتی ایمیل قبلا در مدل ام ثبت کردم ویو مدلش هم ساختم
حالا فرض کنید اخر کار یادم رفته دیتا انوتیشن [EmailAddress] بزارم
الان باید برم توی مدلم بذارم اینو یا ویو مدل یا هر دو؟
– از این مدل برای نوشتن متد خبر نامه و درج ایمیل افراد برای عضویت در خبرنامه استفاده شده
سلام وقتتون بخیر
در مورد سوال اولتون بله باید migration بزیند
در مورد سوال دومتون شما توی ویومدل ا
سلام وقتتون بخیر
در مورد سوال اول بله باید migration بزنید
در مورد سوال دوم شما کافی هست داخل ViewModel دیتاانوتیشن رو اضافه کنید و دیگه نیاز به تغییر مدل نیست.
سلام خسته نباشید من زمانی که میخوام به پوشه Models یه class اضافه کنم برام فقط پروژه های Visual Basic رو نمایش میده و اجازه نمیده از پروژه های Visual C# استفاده کنم و کلاس با پسوند .cs اضافه کنم و کلاس با پسوند .vb اضافه میکنه بعدش برای ایجاد Controller دچار مشکل میشم ممنون میشم راهنمایی کنید چرا اینطوریه
سلام ممنون … شما در ایجاد Controller مشکل دارید یا Model ؟