MVC و معماری MVC جیست؟

معماری MVC در دهه 70 میلادی معرفی شد اما در آن زمان پیاده سازی برنامه های Stand Alone با استفاده از این معماری چندان مورد استقبال برنامه نویسان قرار نگرفت. اما با ظهور اینترنت و برنامه های مبتنی بر وب این معماری شانس دوباره ای یافت. ASP.NET MVC فریم ورک مبتنی بر معماری MVC مایکروسافت میباشد که در این سری مقالات به معرفی و بررسی آن خواهیم پرداخت. از دلایل محبوبیت این معماری نظام بخشیدن به پروژه های طراحی سایت میباشد. معمولاً به علت همکاری چندین تکنولوژی مختلف با هم در برنامه های مبتنی بر وب ساختار پروژه های بزرگ پیچیده میشوند و اعمال تغییرات و همچنین رفع خطا های پروژه مشکل و زمانبر میشوند که معماری MVC با جداسازی لایه های مختلف برنامه نویسی تا حد زیادی این مشکل را رفع کرده است. از دیگر مزایای این فریم ورک میتوان به کنترل کامل بر روی HTML نهایی، پشتیبانی از فریم ورکهای گوناگون برای Unit Testing ، کنترل بر روی آدرسهای URL و تعامل راحت تر با فریم ورکهای javascript اشاره کرد.

 خصوصیات یک نرم افزار خوب چیست ؟

نام بردن تمامی خصوصیات یک نرم افزار خوب در این مقال نمی گنجد اما تعداد محدود و مهمی از آنها عبارتند از:

  • قابل حمل بودن
  • قابل استفاده مجدد بودن
  • قابل تغییر بودن
  • بهینه بودن از لحاط حافظه و زمان (زمان مهمتر از حافظه)

مسئله ؟
بهتر است وجود مسئله را با یک مثال نشان دهم فرض کنید نرم افزاری برای شرکتی نوشتید که یک بخش آن مقدار سود وزیان شرکت را در سال های مختلف بر اساس ارقام بیان میکند . حال صاحب برنامه پس از مدتی ازشما می خواهد برنامه را طوری تغییر دهید که همین اطلاعات را به گونه های دیگری مثلا نمودار های مختلف ( میله ای ، دایره ای و ...) در اختیار داشته باشد و یا حتی بخواهد آنها را به فرمت خاصی و در فایل های خاصی ذخیره کند . در این مواقع چطور مشکل را حل میکنید؟ همانطور که گفته شد یکی از خصوصیات نرم افزار خوب قابل تغییر بودن آن میباشد. فرض کنید که برنامه را به این شکل طراحی کردید:

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

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

شاخصه های زیادی برای طراحی این الگوها در نظر گرفته می شود که چند مورد از آن ها را تیتروار بیان می کنیم :


نگهداری از سیستم :

سیستم ها باید طوری طراحی شوند تا گروه توسعه دهنده یا تیم های دیگر بتوانند در دراز مدت خطاها و باگ های آنرا براحتی در کمترین زمان ممکن رفع نمود. برای خواندن بقیه مطلب به ادامه مطلب بروید

قابلیت استفاده مجدد :
یک طراحی خوب باید بتواند در دراز مدت هم قابلیت توسع داشته باشد و قابلیت جدیدی براحتی و بودن کمترین خللی در بقیه اجزا به سیستم اضافه شود.


بازدهی سیستم :
بخشی از بازدهی سیستم مربوط به چارچوب کاری و پلتفورم موجود است اما یک الگوی مناسب با تقسیم اجزا و ایجاد رابطه ی منطقی بین آنها می تواند در بازدهی سیستم تاثیر بسزایی داشته باشد.

 

MVC چیست ؟

MvC مخفف سه کلمه Model View Controller هست . در واقع MVC بر روی معماری های چند لایه ای جهت جداسازی قسمت های مختلف برنامه و به طور دقیق تر جدا کردن بخش ها منطقی برنامه اعم از دیتا ، permission ها ، چک کردن صحت داده ها و .... از لایه Presentation layer یا در واقع همان لایه ای که مستقیما با کاربر نهایی (End user) در ارتباط است ،قرار میگیرد. پس بر اساس توضیحات فوق می توانیم هر یک از بخش های معماری MVC یعنی Model و View و controller را به شکل زیر تعریف کنیم.

MVC در واقع يك روش براي معماري نرم افزار است كه نرم افزار را به سه قسمت Model ، View و Controller تقسيم مي كند و هر كدام از اين سه قسمت وظيفه خاصي را براي ساخت و اجرا نرم افزار ايفا مي كنند. تركيب اين روش با زبان برنامه نويسي ASP.NET باعث به وجود آمدن مفهومي به نام ASP.NET MVC مي شود كه پروژه هاي برنامه نويسي در زبان ASP.NET بر اساس اين روش طراحي و پياده سازي مي شوند. در برابر مفهوم ASP.NET MVC مفهومي به نام ASP.NET WEB FORMS قرار مي گيرد.

 

مزایای استفاده از ASP.NET MVC

چهارچوب كاري ای اس پی دات نت ام وی سی مزاياي ذيل را در بر مي گيرد:

با تقسيم برنامه به سه بخش Model, View و Controller از پيچيدگي آن كاسته و بر سادگي آن مي افزايد.

در اين روش نيازي به استفاده از فرم هاي server-base نيست. كه اين امر چهارچوب MVC را براي گسترش دهندگاني كه مي خواهند بر روي قسمت هاي مختلف برنامه كنترل كامل داشته باشند به يك چهارچوب ايده آل تبديل مي كند.

شرايط را براي تست برنامه آسان تر مي كند.

با توجه به تقسيم برنامه به قسمت هاي كوچكتر براي كارهاي گروهي بسيار مناسب است. در این معماری در واقع ما دارای ترجمه ای از قسمت های مهم معماری به شکل زیر هستیم:

1. Model
در واقع بار اصلی معماری MVC بر عهده این بخش است . این بخش می تواند با داده ها در ارتباط باشد .الزاماً منظور از داده حتما ارتباط با پایگاه های داده همچون MSSQL و Access و ... نیست ، حتی منبع داده ها در بخش Model می تواند یک آرایه از اعداد و یا هر چیز دیگری باشد . همچنین Model وظیفه چک کردن داده ها جهت صحت درستی داده ها را هم بر عهده دارد (در این زمینه همکاری بیشتری با بخش Controller دارد) و همینطور وظایف دیگری که در مثال ها ی عملی که در آینده خواهم زد بیشتر آشنا خواهید شد.

2. View
این بخش که در واقع همان بخش Presentation Layer در معماری 3 لایه میباشد وظیفه بر قراری ارتباط با کاربر نهایی و گرفتن داده از کاربر و نمایش داده های اماده با کاربراز طریق برقراری ارتباط با دو بخش دیگر یعنی Model و controller است . در واقع نکته مهمی که در بخش View باید مد نظر داشت این است که این لایه مسئول کنترل صحت داده های وارد شده از طریق کاربر و همچنین مسئول صحت داده های نشان داده شده به کاربر نیست . در واقع این بخش با داده های خام کار میکند . یک مثال ساده خیلی از برنامه نویسان هنگامی که در فرم Login برنامه ،کاربر کلمه عبور خود را وارد میکند ، در همان فرم Login اقدام به چک کردن پسورد مبنی بر صحت آن و ... می کنند . که این عمل در معماری MVC قابل قبول نیست . در واقع برای حل مسئله فوق در معماری MVC در فرم Login هنگامی که کاربر کلمه عبور را وارد کرد و دکمه Login یا ورود را زد ، کلمه عبور داده شده بدون هیچ گونه اعمالی اعم از Encrypt کردن و ... به بخش های دیگر فرستاده میشود و فقط یک نتیجه ساده مبنی بر این که کاربر اجازه ورود دارد یا خیر را از بخش های دیگر دریافت میکند که بر اساس آن اجازه ورود کاربر به برنامه داده میشود .

3. Controller
این بخش همانطور که از اسم آن مشخص است یک بخش کنترل کننده می باشد ، و در واقع واسطی بین دو بخش Model و View میباشد. حال ببینیم روند اجرای برنامه در معماری MVC به چه نحوی خواهد بود . در معماری MVC روند کلی برنامه (جزئیات را در ادامه خواهید دید) به این شکل است که کاربر تقاضای خود را از طریق واسط های برنامه نویسی (نظیر Form ها و User Control ها و .. ) از برنامه (از بخش View)درخواست می کند . بخش View در خواست ها را به بخش Controller فرستاده و این بخش با برقراری ارتباط با بخش Model در خواست های کاربر را پردازش کرده و پس از پایان پردازش زمانی که خروجی درخواست داده شده آماده گردید بخش Controller بخش View را آگاه می سازد تا خود را بر اسا س تغییرات جدید که اصطلاحاً در معماری MVC به آن حال Model می گویند ، به روز سازد . در واقع چیزی که باعث میشود تا بخش Controller به بخش View اطلاع دهد که باید حالت جدید model را دریافت کند و خود را Update کند این است که بخش View باید قبلا خودش را در بخش Model اصطلاحا Register کرده باشد که البته عمل Register کردن توسط بخش Controller انجام میگیرد . نحوه register کردن بخش View به معماری آن محیط و همچنین زبانی که توسط آن برنامه را گسترش میدهید و همچنین قابلیت های آن زبان بستگی دارد.

حال با ایجاد یک پروژه آشنای Hello World با ساختار Controller و view آشنا میشویم:

برای ایجاد پروژه جدید مطابق معمول از منوی File ویژال استودیو ، گزینه New و سپس Project را انتخاب کنید و سپس قالب زیر را انتخاب کنید :

mvc-new-project

 

میتوانید basic را انتخاب کنید ، اما basic شامل یک سری الگوهای آماده ، مثل Membership دات نت فریم ورک ، مراجع Jquery ، کلاسهای CSS از پیش ساخته شده است

mvc-solution

همانطور که می بینید پوشه های مجزایی برای هر دسته از فایلها وجود دارد : مثل Controller , View , Model , ... پوشه Script شامل فایلهای جاوا اسکریپت و Jquery و MicrosoftAjax است . پوشه Conetnt هم محلی برای نگهداری فایلهای CSS و تصاویر است. پوشه App_Data جایی است که فایل‌هایی با قابلیت read/write در آن قرار می‌گیرند

مطابق شکل زیر اولین کنترلر خود را به پروژه اضافه کنید: نام کلاس کنترلر مطابق قرارداد، مختوم به کلمه Controller است

mvc-controller

 

در صفحه باز شده نام کنترلر را وارد کنید و روی add کلیک کنید

mvc-controller

 

برای اکشن یک View ایجاد می کنید و در آن ، مشخص می کنید که کاربر چه خروجی را باید مشاهده کند برای این کار روی اکشن راست کلیک کنید:

mvc-view

خواهید دید که فایلی به نام Index.cshtml در فولدر View ایجاد می شود . به ازای هر Controller یک فولدر وجود دارد که در آن View های مربوطه نگهداری می شوند

این فایل را باز کنید و محتویات زیر را به آن اضافه کنید:

mvc-view2

با فشردن دکمه F5 اولین صفحه وب خود را که با تکنولوژی MVC ساخته اید ببینید.

 

هاست لینوکس خرید هاست لینوکس خرید سرور مجازی خرید هاست لینوکس ارزان