نگاهی به ASP.NET MVC و بررسی ساختار آن
MVC یا Model View Controller معماری بود که مایکروسافت در سال 2009 از آن در پیاده سازی فریم ورکی بر روی بسترASP.NET استفاده کرد. همونطور که می دانید .Net Framework پلتفرمی برای ساخت انوع نرم افزار ها، از جمله نرم افزار های Desktop، Web، Console و ... می باشد و از زیرساختی خاص وهزاران کلاس پایه برای رفع نیاز های کلی برنامه نویسان تشکیل شده است.
بر روی بستر دات نت، پلتفرم و زیر ساخت دیگری به نام ASP.NET Framework و به منظور تولید نرم افزارهای تحت وب تولید شد و در نهایت، چیزی که عملا ما با آن ها سر و کار داریم، دو فریم ورک WebForm و MVC هستند که مایکروسافت آن ها بر روی فریم ورک ASP.NET توسعه داد. به طور مثال کلاس های مربوط که Caching، Authentication، Authorization و بسیاری موارد دیگر در Framework ASP.NET قرار دارند و WebForm و MVC از آن ها بهره می گیرند.
اوایل ظهور این فریم ورک این دیدگاه ایجاد شده بود که آینده از آن MVC است و مایکروسافت قصد دارد Asp.net را به سمت این فریم ورک سوق دهد، اما همانطور که خود مایکروسافت هم بار ها بیان کرده، MVC جایگزینی برای WebForm نیست و هر دوی این ها در آینده توسعه خواهند یافت. اما واقعا چرا با وجود WebForm چنین فریم ورکی توسعه داده شد؟!
اگر تا حدی با برنامه نویسی چند لایه آشنایی داشته باشید، مطمئنا نام معماری 3 لایه یا N لایه (N Tier/Layer) زیاد به گوشتان خورده است. هدف از پیاده سازی یک نرم افزار به صورت چند لایه، شکستن بخش های مختلف نرم افزار به قسمت های کوچکتر و توسعه مجزای هر یک از واحد ها برای افزایش Maintainability و Reliability در نرم افزار است. MVC نیز بر همین اصل تایید دارد اما به شکلی بسیار قوی تر. در MVC اجزای مختلف به سه بخش کلی Model، View و Controller تقسیم می شوند و این سه بخش به گونه ای پیاده سازی شده اند که کمترین وابستگی را به یکدیگر را داشته باشند (Seperation Of Concern)، که به دنبال خود همان دو ویژگی مذکور (Maintenance و Reliability) و علاوه بر آن افزایشTest Ability (در توسعه Test Driven Development) نرم افزار را به دنبال خواهد شد.
یکی از ویژگی های مهمی که برای MVC مطرح می شود قابلیت Unit Testing بالای آن است. Unit Testing به معنای تست واحد های مجزای یک نرم افزار، مستقل از دیگر واحد ها می باشد. بطور مثال اگر قرار باشد Business Logic یک نرم افزار مورد تست و ارزیابی قرار گیرد و از کارکرد درست آن اطمینان حاصل شود، این امکان توسط این نوع معماری و به دلیل ساختار آن به شکل بهتر و گسترده تری فراهم می شود.
همانطور که ذکر شد MVC شامل سه قسمت Model، View و Controller می باشد:
Model: مدل که شاید بتوان گفت بخش بزرگ و اساسی این نوع معماری را تشکیل می دهد، تمامی Logic یک نرم افزار را در خود جای داده است. در واقع Domain Model یک نرم افزار که شامل کلیه Business Logic ها، Rule ها،Entity ها و واحد های مختلف برای سرویس دهی به این اجزا می باشد، در این بخش قرار دارند.
View :View یا همان UI بخشی است که فقط مسئول نمایش اطلاعات Model بر روی فرم های وب (در اینجا) می باشد. دقت کنید که از واژه "فقط" استفاده کردم، به این معنی که View هیچ دخالتی در هیچ پردازشی بر روی Model ندارد و نباید داشته باشد. مقایسه کنید با مدل Code Behind در WebForm ها که همیشه بخشی از Logic یک نرم افزار در آن قرار می گرفت و شاید عمده دلیلی که در View های MVC چیزی به نام Code Behind وجود ندارد همین است.
Controller: کنترلر وظیفه برقرای ارتباط بین Model و View را بر عهده دارد، در واقع این Controller است که با دریافت پارامتر هایی از ورودی (فرم های وب، Query string و...) و انجام پردازش بر روی Model و در ارسال اطلاعات نهایی به View برای نمایش، جریان بین این دو را کنترل می کند.
حال که تا حدی با ساختار این معماری آشنا شدید بد نیست که کمی در مورد تاریخچه آن نیز بدانید:
الگوی MVC اولین بار در سال 1987 توسط فردی به نام Trygve Reenskaug با نام اولیه یThing Model View Editor مطرح شد و خیلی نگذشت که نام به آن Model View Controller تغییر داده شد. MVC برای اولین بار در زبان Small Talk به عنوان یک GUI Pattern مورد استفاده قرار گرفت و پس از سال ها رشد و باز شدن پای MVC به دنیای وب، امروزه در فریم ورک های معروفی همچون Ruby On Rail، Merb و Django مورد استفاده قرار می گیرد.
Mono Rail اولین فریم ورک MVC برای Asp.net بود که به صورت Open Source منتشر شد و در نهایت خود مایکروسافت بود که توسط Scott Guthrie جدید ترین و مدرن ترین فریم ورک خود را برای Asp.net در سال 2009 منتشر ساخت.
اما برخی از مزایای WebForm و MVC نسبت به هم از زبان خود مایکروسافت:
Advantages of an MVC-Based Web Application
The ASP.NET MVC framework offers the following advantages:
Advantages of a Web Forms-Based Web Application
The Web Forms-based framework offers the following advantages:
البته برای افرادی که تا کنون با WebForm کار کرده اند، ممکن است این تصور ایجاد شود که عدم وجود کنترل های Server Side و حتی event ها در Asp.net MVC، نوع برنامه نویسی با این فریم ورک باید بسیار سخت تر باشد، اما این اطمینان را می دهم که واقعا به این شکل نیست و اگر در MVC زیر ساخت های لازم فراهم شود، سرعت توسعه در آن چندین برابر WebForm ها خواهد بود.