معماری MVC چیست
معماری mvc مبحثی است که ما در این مقاله قصد پرداختن به آن را داریم.
در این مقاله به صورت تخصصی در رابطه با معماری mvc و زبان های در برگیرنده ی آن صحبت خواهیم کرد.
معماری Model-View-Controller (MVC) یکی از محبوب ترین الگوهای توسعه نرم افزار است.
منطق پشت معماری MVC از اصل طراحی جداسازی concerns استفاده می کند.
هدف این اصل تفکیک یک برنامه کاربردی به بخشهای district است که در آن هر بخش به یک موضوع خاص و جداگانه میپردازد.
معماری MVC از اصل جداسازی concerns یا همان separation of concerns به طور کامل پیروی می کند.
در واقع، هر حرف در مخفف MVC نشان دهنده یک بخش ضروری از برنامه شما است.
این مقاله هر بخش از معماری MVC را بررسی می کند و به شما نشان می دهد که چگونه از آنها برای توسعه نرم افزار استفاده کنید.
Model چیست ؟
خب برویم سراغ اولین مفهوم و در واقع اولین حرف mvc یعنی m که مخفف model می باشد.
مدل معماری MVC کامپوننت اصلی الگوی طراحی است.
این به این دلیل است که مدل برنامه شما ، data logic را ذخیره می کند.
این مدل نحوه ذخیره و بازیابی داده های خود را دیکته می کند.
برای برنامه ای که از معماری کنترلر MVC استفاده میکند ، دادهها کامپوننت ضروری عملکرد آن هستند.
View چیست ؟
View معماری MVC رابط کاربری (UI) برنامه شما است.
UI چیزی است که کاربر هنگام کار با برنامه شما روی دستگاه خود می بیند.
(برای آشنایی بیشتر با رابط کاربری می توانید به مقاله ی مربوطه ی آن بروید.)
مشاهده وضعیت به داده های ذخیره شده به استفاده از مدل متکی است.
Controller چیست ؟
شما می توانید Controller را به عنوان پلی بین اجزای Model و View در نظر بگیرید.
هنگامی که یک کاربر داده ها را از طریق رابط کاربری شما (View) تامین می کند، View آن داده ها را به کنترلر ارسال می کند.
کنترلر از آن داده ها برای به روز رسانی پایگاه داده (از طریق Model) استفاده می کند.
کنترلر همچنین داده ها را از پایگاه داده (از طریق Model) دریافت می کند و به View برمی گرداند.
کنترلر علاوه بر اینکه یک کانال داده است ، مغز عملیات نیز می باشد.
تصمیم میگیرد چه عملیاتی روی کدام داده انجام شود و چه دادههایی را به UI برگرداند.
عملکرد سه جزء با یکدیگر
سوالی که حال پیش می آید این است که این سه جزء چگونه با یکدیگر کار می کنند.
معماری MVC یک حلقه نیمه بسته ایجاد می کند که برای عملکرد مناسب به همه اجزا متکی است.
تصویر زیر نحوه عملکرد معماری MVC را نشان می دهد.
همانطور که از تصویر بالا می بینید، برنامه MVC یک ورودی اولیه داده را از طریق رابط کاربری از کاربر دریافت می کند.
سپس برنامه آن داده ها را از طریق اجزای مختلف معماری MVC عبور می دهد و در برخی موارد ، آن داده ها را در کامپوننت Controller دستکاری می کند.
استفاده از معماری MVC
در این قسمت قصد داریم یک مثالی را برای پیاده سازی mvc بزنیم.
فرض کنید در حال توسعه یک برنامه کاربردی برای یک پمپ بنزین هستید که میخواهد رکوردی از تمام بنزین فروخته شده در پمپ ایجاد کند و به متصدیان بنزین در محاسبه قیمت کمک کند.
با استفاده از معماری MVC، با Model شروع میکنید ، سپس به Controller میروید ، و بعد از اینکه تمام منطق برنامهتان را فهمیدید ، میتوانید View را پیادهسازی کنید.
هنگام ایجاد یک مدل برای برنامه خود ، باید بدانید که چه نوع دادههایی را میخواهید ذخیره کنید، چگونه میخواهید آن دادهها را ذخیره کنید و چقدر میخواهید آن دادهها در دسترس باشند.
(در قطعه کد زیر ما از کتابخانه های جاوا استفاده کردیم و شما می توانید برای آشنایی بیشتر با زبان جاوا به مقاله ی مربوطه ی آن بروید.)
//Java library
importstrong> java.io.Serializable;
publicstrong> classstrong> GasPriceModel implementsstrong> Serializable{
//attributes
privatestrong> staticstrong> finalstrong> longstrong> serialVersionUIDem>strong> = 1L;
privatestrong> String driverName;
privatestrong> floatstrong> gasAmount;
privatestrong> String gasType;
privatestrong> floatstrong> cost;
// default constructor
publicstrong> GasPriceModel() {
thisstrong>.driverName = "";
thisstrong>.gasAmount = 0.00f;
thisstrong>.gasType = "";
thisstrong>.cost = 0.00f;
}
//primary constructors
publicstrong> GasPriceModel(String driverName, floatstrong> gasAmount, String gasType, floatstrong> cost) {
thisstrong>.driverName = driverName;
thisstrong>.gasAmount = gasAmount;
thisstrong>.gasType = gasType;
thisstrong>.cost = cost;
}
//getters and setters that retrieve and manipulate data
publicstrong> String getDriverName() {
returnstrong> driverName;
}
publicstrong> voidstrong> setDriverName(String driverName) {
thisstrong>.driverName = driverName;
}
publicstrong> floatstrong> getGasAmount() {
returnstrong> gasAmount;
}
publicstrong> voidstrong> setGasAmount(floatstrong> gasAmount) {
thisstrong>.gasAmount = gasAmount;
}
publicstrong> String getGasType() {
returnstrong> gasType;
}
publicstrong> voidstrong> setGasType(String gasType) {
thisstrong>.gasType = gasType;
}
publicstrong> floatstrong> getCost() {
returnstrong> cost;
}
publicstrong> voidstrong> setCost(floatstrong> cost) {
thisstrong>.cost = cost;
}
}
چندین نکته مهم برای شناسایی در کد مدل بالا وجود دارد.
اولین مورد این است که رابط Serializable را پیاده سازی می کند.
این رابط به شما این امکان را می دهد که وضعیت هر شی ایجاد شده با استفاده از کلاس GasPriceModel را با تبدیل آن به یک جریان بایت ذخیره کنید.
پیاده سازی رابط Serializable به این معنی است که شما همچنین باید یک version ID ایجاد کنید ، این همان کاری است که اولین اتریبیوت در کلاس بالا انجام می دهد.
ASP.NET MVC
ما قبلا در دو مقاله به صورت کامل با asp.net آشنا شده ایم که در ادامه ی این مقاله قصد داریم با معماری mvc در این زبان آشنا شویم.
ASP.NET از سه مدل توسعه اصلی پشتیبانی می کند : صفحات وب، فرم های وب (Web Forms) و MVC (Model View Controller).
فریم ورک ASP.NET MVC یک چارچوبی است که با ویژگی های موجود ASP.NET مانند صفحات اصلی ، احراز هویت و … یکپارچه شده است.
در داخل دات نت، این چارچوب در مجموعه System.Web.Mvc تعریف شده است.
آخرین نسخه MVC Framework 5.0 است.
ما از ویژوال استودیو برای ایجاد برنامه های ASP.NET MVC استفاده می کنیم که می توانند به عنوان یک الگو در ویژوال استودیو اضافه شوند.
ویژگی های ASP.NET MVC :
- ایده آل برای توسعه برنامه های کاربردی پیچیده اما سبک وزن.
- یک چارچوب قابل توسعه و قابل اتصال را ارائه می دهد که به راحتی قابل تعویض و سفارشی سازی است.
- از طراحی مبتنی بر کامپوننت برنامه با تقسیم منطقی آن به کامپوننت های Model، View و Controller استفاده می کند.
این امر توسعه دهندگان را قادر می سازد تا پیچیدگی پروژه های در مقیاس بزرگ را مدیریت کرده و بر روی کامپوننت های جداگانه کار کنند. - ساختار MVC توسعه آزمایش محور و قابلیت آزمایش برنامه را افزایش می دهد، زیرا همه اجزا را می توان بر اساس رابط طراحی کرد و با استفاده از اشیاء ساختگی آزمایش کرد.
از این رو، ASP.NET MVC Framework برای پروژه هایی با تیم بزرگ توسعه دهندگان وب ایده آل است. - پشتیبانی از تمامی قابلیتهای گسترده ASP.NET، مانند مجوز و احراز هویت، صفحات اصلی، اتصال دادهها، کنترلهای کاربر، عضویتها، مسیریابی ASP.NET و …
- از مفهوم View State (که در ASP.NET وجود دارد) استفاده نمی کند.
این به ساختن برنامه هایی که سبک وزن هستند کمک می کند و کنترل کامل را به توسعه دهندگان می دهد.
ASP.NET Forms
فرمهای وب MVC و ASP.NET بسته به نیاز برنامه و سایر عوامل، مدلهای توسعه ای مرتبط و در عین حال متفاوتی هستند.
به طور کلی MVC یک چارچوب برنامه کاربردی وب پیشرفته و پیچیده است که با در نظر گرفتن separation of concerns و قابلیت آزمایش طراحی شده است.
هر دو چارچوب بسته به نیازهای خاص مزایا و معایب خود را دارند. این مفهوم را می توان با استفاده از نمودار زیر تجسم کرد
ساخت اولین برنامه با asp.net mvc
خب در این بخش میخواهیم اولین برنامه MVC خود را با استفاده از Views و Controller ایجاد کنیم.
مرحله ۱ : ویژوال استودیو خود را راه اندازی کنید و File → New → Project را انتخاب کنید.
Web → ASP.NET MVC Web Application را انتخاب کنید و نام این پروژه را FirstMVCAapplicatio بگذارید.
لوکیشن را به عنوان C:\MVC انتخاب کنید.
روی OK کلیک کنید.
مرحله ۲ : با این کار گزینه Project Template باز می شود.
Empty template و View Engine را به عنوان Razor انتخاب کنید.
روی OK کلیک کنید.
اکنون ویژوال استودیو اولین پروژه MVC ما را همانطور که در تصویر زیر نشان داده شده است ایجاد می کند.
مرحله ۳ : اکنون اولین Controller را در برنامه خود ایجاد می کنیم.
کنترلرها فقط کلاس های #C ساده هستند که شامل چندین متد عمومی هستند که به عنوان متدهای action شناخته می شوند.
برای افزودن یک Controller جدید، روی پوشه Controllers در پروژه ما راست کلیک کرده و Add → Controller را انتخاب کنید.
نام Controller را به عنوان HomeController بگذارید و روی Add کلیک کنید.
با این کار یک فایل کلاس HomeController.cs در پوشه Controllers با کد پیش فرض زیر ایجاد می شود.
using System;
using System.Web.Mvc;
namespace FirstMVCApplication.Controllers {
public class HomeController : Controller {
public ViewResult Index() {
return View();
}
}
}
کد بالا اساساً یک public method Index را در داخل HomeController تعریف می کند و یک شی ViewResult را برمی گرداند.
در مراحل بعدی نحوه برگرداندن View را با استفاده از شی ViewResult خواهیم آموخت.
مرحله ۴ : اکنون یک View جدید به Home Controller خود اضافه می کنیم.
برای افزودن یک View جدید ، روی پوشه view کلیک راست کرده و روی Add → View کلیک کنید.
مرحله ۵ : View جدید را به عنوان Index و View Engine را به عنوان Razor (CSHTML) نامگذاری کنید.
روی افزودن کلیک کنید.
با این کار یک فایل cshtml جدید در پوشه Views/Home با کد زیر اضافه می شود.
@{
Layout = null;
}
Index
مرحله ۶ : محتوای body ویو بالا را با کد زیر تغییر دهید.
Welcome to My First MVC Application (From Index View)
مرحله ۷ : اکنون برنامه را اجرا کنید.
این خروجی زیر را در مرورگر به شما می دهد.
این خروجی بر اساس محتوای موجود در فایل View ما ارائه می شود.
برنامه ابتدا Controller را فراخوانی می کند که به نوبه خود این View را فراخوانی می کند و خروجی را تولید می کند.
در مرحله ۷ ، خروجی دریافتی ما بر اساس محتوای فایل View ما بود و هیچ تعاملی با Controller نداشت.
با حرکت به جلو، اکنون یک مثال کوچک برای نمایش پیام خوش آمدگویی با زمان فعلی با استفاده از تعامل View و Controller ایجاد می کنیم.
مرحله ۸ : MVC از شی ViewBag برای ارسال داده بین Controller و View استفاده می کند.
HomeController.cs را باز کنید و تابع Index را به کد زیر ویرایش کنید.
public ViewResult Index() {
int hour = DateTime.Now.Hour;
ViewBag.Greeting =
hour < 12
? "Good Morning. Time is" + DateTime.Now.ToShortTimeString()
: "Good Afternoon. Time is " + DateTime.Now.ToShortTimeString();
return View();
}
در کد بالا مقدار صفت Greeting شی ViewBag را تعیین می کنیم.
کد ساعت جاری را بررسی می کند و پیام صبح بخیر/بعد از ظهر (Morning/Afternoon) را با استفاده از عبارت () return View برمی گرداند.
توجه داشته باشید که در اینجا Greeting فقط یک اتریبیوت مثال است که ما با شی ViewBag استفاده کرده ایم.
می توانید از هر نام اتریبیوت دیگری به جای Greeting استفاده کنید.
مرحله ۹ : Index.cshtml را باز کنید و کد زیر را در قسمت body کپی کنید.
body>
@ViewBag.Greeting (From Index View)