آشنایی با Server Side در Asp Mvc & Mvc Core
- 1399/6/21
- 789
- برنامه نویسی
بخش چهارم
آشنایی با & Core Server Side Asp.Net Mvc
در مقاله قبلی در خصوص سمت سرور WebForm آشنایی پیدا کردیم. در این مقاله می خواهیم به سمت سرور Mvc & Mvc Core بپردازیم.
بخش سرور در این نسل رنگ و بوی تازه ای به خود گرفته و کدنویسی در این نسل برای سمت سرور جذاب تر و ساده تر شده است.
نکته ای که همین ابتدا باید به آن اشاره کنیم بحث سمت سرور نسل دوم و سوم هست. هر دوی این نسل ها از سمت سرور مشابهی برخوردار هستند پس هر نکته ای که گفته میشود یا هر بحثی که مطرح میشود به صورت مشترک مد نظر هست مگر اینکه تفاوت هایی در قسمتی باشد که صراحتا اعلام میکنیم.
و اما ادامه بحث . خاصیت جداسازی Model و View و Controller به مباحث سمت سرور بسیار کمک کرد. چرایی کار در این مورد است که برای هر رویداد ما یک اکشن جداگانه قادر خواهیم بود بسازیم و این مورد کمک مهمی در کدنویسی و تفکیک دستورات در سمت سرور خواهد بود.
همچنین وجود خود مدل که در سمت سرور به کار میرود باعث شد که سمت سرور ما لایه بندی شود و در کنار کنترلر کارایی بهتر و مناسب تر باشد.
مدل چیست؟ هر کلاس , شی یا پایگاه داده ای که بتواند داده های پویا یا ایستا را نگهداری و یا دریافت نماید توانایی مدل بودن را دارد. مثلا کلاس نمونه زیر یک مدل می تواند باشد.
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace NameProject.Models
{
public class Test
{
public int id { get; set; }
public string name { get; set; }
}
}
این کلاس دارای عناصری هست بنام Propertyکه هم به صورت Get میتواند اطلاعات و داده ها را دریافت کند هم میتواند داده ها و اطلاعات را به بخش دیگری Set نماید.
در این کلاس دو متد پراپرتی بنام id و name با نوع متغییر عدد و رشته معرفی شده. این دو پراپرتی قادر خواهند بود عناصر رشته و عدد را دریافت یا ارسال نمایند.
نکته: مدل به تنهایی کارایی ندارد.
این نکته بسیار مهم است که در این نسل اگر چه مدل جدا سازی شده است اما به تنهایی کاراریی ندارد و باید در سمت کنترلر فراخوانی شود تا قادر به فعالیت باشد.
نکته ای دومی که جالب است بدانید اگرچه در بالا ذکر شد مدل تنهایی کارایی ندارد و باید در کنترلر فراخوانی شود. ولی در روشی مجزا بنام ریپوزیتوری سازی هم میتوان مدل را فراخوانی کرد بدون اینکه اصلا کنترلر درگیر شود.
ریپوزیتوری بحث جالبی هست که خود به شیوه یک کنترلر مجزا عمل میکند که در مقاله ای جداگانه در موردش صحبت خواهیم کرد.
اما کنترلر: صفحه ای است که تمامی عملیات های سمت سرور در آن صورت گرفته و کنترل میشود. در کنترلر برای مدیریت یک صفحه سمت کاربری باید اکشن (Action) ایجاد نمود و از طریق آن تمامی رویداد های لازم را مدیرت کرد. ای رویداد ها در صفحه سمت کاربر رخ خواهد داد.
نمونه ای از یک کنترلر:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
return View();
}
public ActionResult Contact()
{
return View();
}
}
کنترلر نمایش داده شده در نمونه بنام Home می باشد. هر کنترلر میتواند نام منحصر بفرد خود را داشته باشد. اما نکته ای که باید مدنظر داشته باشیم پسوند Controller است. در هر کنترلر یک نام دلخواه همراه با پسوند مورد نظر قرار میگیرد.
اما نکته جالبتر اینکه بعد از نام کنترلر چون این یک کلاس است باید خاصیت های سمت سرور را برایش - تعریف کنیم برای اینکار از الحاق استفاده میکنیم با علامت : کلاسی بنام Controller که از پیش تعریف شده است را فراخوانی و الحاق میکنیم به کلاس ساخته شده خودمان. به این ترتیب صفحه سمت سرور ما شکل میگیرد.
همانطور که گفیتم برای هر صفحه سمت کاربر یک اکشن باید تعریف شود در این نمونه سه اکشن مجزا تعریف شده که هر کدام به ترتیب صفحه اصلی و صفحه درباره ما و صفحه ارتباط با ما می باشد.
این سه صفحه به صورت اکشن تعریف شده با نتیجه مشخص که کاربر میتواند مشاهده نمایید به همین خاطر کلاس ActionResult را در متد آن به کار میبریم.
تمام عملیات های لازم در بدنه این اکشن ها نوشته خواهد شد و در نهایت خروجی به View ارسال میشود. وجود return View() به همین منظور می باشد. یعنی خروجی برگشت داده میشود به ویو مورد نظر ما.
حال میخواهیم مدلی که در نمونه ایجاد کردیم را در این کنترلر در اکشن Index پیاده سازی و مقدار دهی کنیم.
برای این کار به روش زیر عمل مینماییم.
using NameProject.Models;
namespace NameProject.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
Test t = new Test();
t.id = 1;
t.name = "هوشمندان";
return View(t);
}
}
}
برای اینکار ابتدا مسیر فیزیکی کلاسی که ایجاد کریم را باید معرفی کنیم. کلاس Test در مدل قرار دارد پس مسیر قرار گیری مدل را در خط اول اضافه میکنیم.
سپس در متد اکشن Index که در کنترلر قرار دارد نام کلاس Test را فراخوانی و برایش عنوان t می گذاریم. سپس با عنوان t به دو پراپرتی موجود در آن دسترسی پیدا میکنیم. یعنی id و name .
هر دو پراپرتی را مقدار دهی کرده و در نتیجه مقدار موجود را به صفحه ویو ارسال میکنیم. return View(t); اینجا مقادیر موجود در t را به صفحه view میفرستد.
روش گفته شده در هر دو نسل یکسان است ولی در mvc core ما بجای ActionResult از IActionResult استفاده میکنیم . این کلاس در اصل بهبود یافته تر گشته به همین خاطر, نام کلاس تغییر کوچکی داشته است که نشانه همین موضوع می باشد.
ساز و کار و شیوه پیاده سازی در هر دونسل جدید Asp در سمت سرور تقریبا یکسان است و این نشانه از ثبات در این بخش برای این زبان برنامه نویسی می باشد.
و اما اخرین بحث این بخش. نحوه دسترسی صفحه ویو به اطلاعات لازم. دیدیم که اطلاعات نهایت از طریق اکشن در کنترلر به سمت ویو ارسال میشود. در قطعه کد زیر چگونی دریافت این اطلاعات در ویو مشخص شده است.
@model Projectname.Models.Test
<div >
@Model.id
@Model.name
</div>
با مشاهده این کد میبینیم که در سمت کاربری ابتدای صفحه با razor به مدل دسترسی پیدا کرده ایم. پس مدل هم میتواند در کنترلر نقش داشته باشد هم در ویو. دلیل اینکه get و set میکند اطلاعات را اینجا متوجه میشویم.
مسیر فیزیکی قرارگیری مدل را دوباره فراخوانی و کلاس مذکور Test را به ویو معرفی میکنیم. این معرفی داخل model قرار میگیرد. این خاصیت razor برای نگهداری اطلاعات در ویو در نظر گرفته شده است.
سپس در تگ html مقادیر را با یک razor دیگر اینبار با نام Model فراخوانی و نمایش میدهیم.دقت داشته باشید model با حروف کوچک است که اطلاعات را دریافت و Model دوم با حرف بزرگ شروع میشود که اطلاعات را واکشی و قابل نمایش میکند.
پس در سمت سرور نسل دوم و سوم یکپارچگی بین قسمت ها وجود دارد و هر بخش وظیقه خود را انجام داده و ارتباط مستقیمی با هم دیگر دارند.
پایان بخش چهارم