ASP.NET MVC; ساخت صفحات وب بدون فرم های وب!

اگر برای توسعه وب اپلیکیشن ها از ASP.NET استفاده می کنید و با نام MVC آشنایی ندارید، پس در حال حاضر از وب فرم ها در ASP.NET استفاده می کنید. اگر نمی دانید منظور از وب فرم ها (WebForms) چیست، این مطلب را بخوانید. شرکت مایکروسافت علاوه بر وب فرم ها، فریم ورک دیگری به نام ASP.NET MVC برای ایجاد وب اپلیکیشن ها در ASP.NET در اختیار توسعه دهندگان وب قرار داده است. این فریم ورک جدید، رایگان و کدباز است و روشی متفاوت از وب فرم ها برای توسعه صفحات وب به توسعه دهندگان ASP.NET ارائه می کند. در این مطلب به معرفی فریم ورک قدرتمند ASP.NET MVC می پردازم.

ASP.NET MVC فریم ورک قدرتمندی برای ایجاد اپلیکیشن های تحت وب است که از الگوی MVC استفاده می کند و توسط مایکروسافت به صورت اوپن سورس توسعه داده می شود. MVC یک الگوی طراحی و مخفف کلمات Model-View-Controller است. فریم ورک ASP.NET MVC الگوی طراحی MVC را در پلت فرم وب اپلیکیشن مایکروسافت یعنی ASP.NET پیاده سازی می کند. این فریم ورک اولین بار در دسامبر 2007 و با یک نسخه CTP توسط مایکروسافت معرفی شد. در مارس 2009 نسخه 1 پایدار آن عرضه شد و یک ماه بعد یعنی در آپریل 2009 شرکت مایکروسافت سورس کد فریم ورک ASP.NET MVC را تحت مجوز MS-PL منتشر نمود.

MVC چیست!؟

mvc

مفهوم کلیدی این فریم ورک همان سه حرف آخر آن یعنی MVC است. پس کمی در مورد آن توضیح می دهم. همانطور که گفتم، MVC یک الگوی طراحی است که همانطور که از نامش پیداست، یک پروژه نرم افزاری را به سه قسمت منطقی Model, View و Controller تقسیم می کند. شاید شما در حال حاضر با معماری 3 لایه نرم افزاری آشنا باشید. اگر اینطور است، شما مشکلی در درک الگوی طراحی MVC نخواهید داشت. MVC مفهوم جدیدی نیست، خیلی وقت است که در جاوا، رابی، PHP و بسیاری پلت فرم های دیگر از این الگو برای طراحی نرم افزار استفاده می شده است. اما خب برای توسعه دهندگان ASP.NET تازه است. سه قسمت اصلی الگوی MVC :

  • Model : مدل قسمتی از یک اپلیکیشن است که وظایف سنگین دسترسی به داده ها، پیاده سازی منطق و موجودیت ها را بر عهده دارد. به طور معمول یک مدل وظیفه Map کردن جداول اطلاعاتی یک دیتابیس را به کلاس های شیء گرا و برعکس را بر عهده می گیرد. احتمالاً شما همین الان هم در پروژه های خود، مدل را پیاده سازی می کنید و به آن لایه دسترسی به داده می گویید! Model باید طوری پیاده سازی شود که به هیچ وجه به رابط کاربری وابستگی نداشته باشد.
  • View : احتمالاً کاربرد View را حدس زده اید! رابط کاربری همان View است. در واقع بخشی که یک کاربر نهایی با آن تعامل خواهد داشت و اطلاعات را نمایش می دهد، View نام دارد. همانطور که رابط کاربری برای Model هیچ اهمیتی ندارد، اینکه چطور داده ها اعتبارسنجی یا ذخیره می شوند یا منطق اپلیکیشن شما چطور پیاده سازی شده است، برای View مهم نیست.
  • Controller : فضای خالی میان Model و View را Controller پر می کند. از آنجا که Model و View هیچ ارتباطی با هم ندارند و برای یکدیگر هیچ اهمیتی قائل نیستند، Controller داده ها را از Model به View برای نمایش به کاربر انتقال می دهد. کنترلرها تصمیم می گیرند که اطلاعاتی که شما وارد کرده اید را به کجا برسانند و همینطور چه چیزی را باید در خروجی مشاهده کنید. در واقع کنترل کننده و هماهنگ کننده میان Model و View است.

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

چرا از ASP.NET MVC استفاده کنیم؟

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

یکی از مزایای مهم استفاده از متدولوژِی ASP.NET MVC این است که شما را مجبور می کند تا یک جداسازی شفاف میان اجزای برنامه خود ایجاد کنید. این کار باعث می شود که توسعه پروژه در دراز مدت و آزمایش آن به آسانی انجام گیرد. الگوی MVC به شما کمک می کند تا بتوانید از Test Driven Development یا TDD در پروژه خود استفاده کنید. شما را قادر می سازد تا از تست واحد یا Unit Test استفاده کنید. به طور مثال شما می توانید عملکرد یک Controller را بدون اینکه روی ASP.NET اجرا شود، بررسی کنید که این کار عملیات تست واحد را سرعت می بخشد. برای انجام تست، می توانید از هر فریم ورک تست واحدی مثل NUnit استفاده کنید.

URLهای ایجاد شده در یک پروژه مبتنی بر فریم ورک ASP.NET MVC بسیار بسیار واضح هستند و البته برای موتورهای جستجوگر دوستانه (SEO Friendly) هستند. این کار را کامپوننت URL Mapping فریم ورک ASP.NET MVC برای شما انجام می دهد. URLهایی که نیازی به داشتن پسوند aspx یا هر پسوند دیگری ندارند و به آسانی از قوانین SEO و الگوهای نام گذاری REST پشتیبانی می کنند.

نکته ای که شما را خوشحال خواهد کرد این است که فریم ورک ASP.NET MVC از بسیاری از امکاناتی که در حال حاضر در ASP.NET هستند مثل MasterPage, Data Binding, Form/Windows Authorization, Membership/Roles, Data Caching, Session/Profile state management, Health Monitoring پشتیبانی کامل می کند.

نکته ای هم که ممکن است شما را اذیت کند این است که در فریم ورک ASP.NET MVC از برنامه نویسی مبتنی بر رویداد خبری نیست و همچنین نمی توانید از Post Back برای تعامل دوباره با سرور استفاده کنید. ASP.NET MVC برخلاف وب فرم ها که به صورت خودکار و با استفاده از ViewState حالت یک صفحه وب را به صورت مصنوعی حفظ می کنند، از مدل طبیعی بی حالت (=Stateless) وب پیروی می کند. البته این موضوع آنقدرها هم بد نیست چون باعث حذف ViewState می شود و حذف ViewState هم به معنی صفحات سبک تر و در نتیجه لود شدن سریعتر صفحات وب است.

برای شروع ASP.NET MVC به چه چیزهایی احتیاج دارید!؟

منابع این مطلب :

farasun.wordpress.com

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

farasun.wordpress.com

پ.ن : مطلب مناسبی به زبان فارسی در مورد ASP.NET MVC در وب پیدا نکردم، به همین علت این مطلب را نوشتم. در آینده اگر علاقه مند بودید، در مورد تفاوت های ASP.NET MVC و ASP.NET WebForms خواهم نوشت.

آشنایی با وب فرم ها در ASP.NET

ASP.NET فریم ورک قدرتمند مایکروسافت برای ایجاد وب اپلیکیشن های تجاری و بزرگ است. این فریم ورک با پشتیبانی مایکروسافت و داشتن یک محیط قدرتمند و سریع توسعه به نام Visual Studio به یکی از محبوب ترین و قدرتمند ترین ابزارهای توسعه وب تبدیل شده است. در این نوشته قصد داریم مروری بر یکی از ویژگی های اساسی ASP.NET به نام Web Forms بپردازیم.

Web Forms پایه و اساس ASP.NET است. وب فرم ها قلب و روح ASP.NET هستند. وب فرم ها رابط کاربری وب اپلیکیشن شما را شکل می دهند و راه حلی مناسب برای توسعه ی آن به شما ارائه می کنند. وب فرم ها شبیه به ویندوز فرم ها دارای مشخصات، متدها و رویدادهای کنترل های داخلشان هستند. اجزای رابط کاربری داخل وب فرم ها بر اساس درخواستی که به آن ها فرستاده می شود، به زبان نشانه گذاری مناسب (مثل HTML) رندر می شوند.

وب فرم ها شامل دو قسمت هستند : قسمت بصری (فایل aspx)، و Code Behind که هر کدام در کلاس های جداگانه ای قرار می گیرند. فایل aspx کدهای مربوط به طراحی وب فرم ها را شامل می شود و Code Behind شامل کدهای منطق برنامه و رویدادهای مروبط به کنترل های سمت سرور است. Code Behind می تواند به زبان ویژوال بیسیک یا سی شارپ نوشته شود.

asp-dot-net-web-forms

از مزایای استفاده از وب فرم ها می توان به نکات زیر اشاره نمود :

  • جداسازی منطق برنامه از کدهای HTML
  • استفاده از مدل برنامه نویسی مبتنی بر رویدادها
  • کد کامپایل شده و پشتیبانی از چند زبان برنامه نویسی
  • مجموعه ای از کنترل های سمت سرور که قادر به شناسایی مرورگر کاربر هستند و بر اساس آن کد زبان نشانه گذاری (مثل HTML یا WML) را تولید می کنند
  • به شما اجازه می دهند تا کنترل های جدید با قابلیت های جدید به آن اضافه کنید
  • کد کمتری برای کارهای مختلف همچون بایند کردن داده های بانک اطلاعاتی به کنترل ها خواهید نوشت
  • زمان توسعه را به حداقل می رساند و بهره وری را افزایش می دهد

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

کنترل های HTML همانطور که از نامشان پیداست شامل همین کنترل های معمول HTML مانند Button, Text Field, Text Area, Dropdown هستند. اگر تا به حال از نرم افزارهای ویرایشگر HTML برای طراحی رابط کاربری وب استفاده کرده باشید، کاملاً با این کنترل ها آشنایی دارید. شما می توانید از کنترل های استاندارد HTML در وب فرم ها استفاده کنید. کنترل های HTML که در ویژوال استادیو یافت می شوند همان هایی هستند که در Front Page هم پیدا می شدند. این کنترل ها نیازی به پردازش تحت سرور ندارند و به سادگی توسط مرورگر رندر می شوند. هر چند شما می توانید با اضافه کردن runat=»server» به مشخصات هر یک از کنترل های HTML کاری کنید تا به رویدادهای تحت سرور هم پاسخ گوید.
کنترل های وب فرم روی سرور ساخته می شوند و پس از اینکه وظیفه ای که برایشان مشخص شده را به انجام رساندند، کد HTML متناظر را تولید کرده و به خروجی می فرستند. این کنترل ها برخلاف کنترل های استاندارد HTML، هوشمند هستند؛ یعنی قادر به تشخیص مرورگر کاربر و فرستادن کد زبان نشانه گذاری مناسب هستند. به طور مثال اگر مروگر کاربر فایرفاکس باشد، کد HTML مناسب با آن را تولید می کنند و اگر کاربر بوسیله یک گوشی هوشمند درخواستی فرستاده باشد، کد WML را به خروجی می فرستند. تمام کنترل های وب فرم از یک کلاس عمومی با نام System.Web.UI.WebControls مشتق می شوند. این کلاس پایه مجموعه ای از مشخصات عمومی را برای کنترل های وب فرم پیاده سازی می کند.

وب فرم ها چگونه کار می کنند؟

مانند ویندوز فرم ها، رویدادهایی به صورت پشت سر هم و یا بر اساس درخواست کاربر در وب فرم ها اتفاق می افتند. رویدادهایی مانند Load, Draw (Render) و Unload برای وب فرم ها اتفاق می افتد. در زمان این اتفاقات ممکن است روال های مختلفی صدا زده شوند یا اشیای مختلفی ایجاد شوند. در ابتدا رویداد Init مقداردهی های اولیه صفحه وب را بر اساس تگ های به کار رفته در فایل aspx انجام می دهد. بعد از این، رویداد Load برای صفحه اتفاق می افتد. رویداد Load جایی است که شما می توانید چک کنید که آیا صفحه برای اولین بار توسط کاربر بارگذاری شده یا توسط کلیک روی یک دکمه، صفحه وب به سرور وصل شده و به اصطلاح به خودش Post Back کرده است. در رویداد Load می توانید کاری کنید که برخی اعمال فقط برای اولین بارگزاری صفحه وب انجام شوند؛ مثل بایند کردن داده های دیتابیس به کنترل ها. سپس اگر صفحه Post Back شود، رویدادهای کنترل های روی وب فرم ها اتفاق می افتند. مثلاً هنگامی که روی یک دکمه کلیک می شود، صفحه وب اطلاعاتی را به سرور می فرستد و دوباره به صفحه بر می گردد. در این صورت رویداد کلیک برای دکمه فوق اتفاق افتاده و کدی که شما برای آن نوشته اید اجرا شده است.

االبته قبل از Dispose شدن صفحه وب، رویداد Page_Unload هم اتفاق می افتد. به این علت که صفحه از قبل رندر شده و رویدادهای مورد نیاز کاربر اتفاق افتاده اند، این رویداد بیشتر به منظور عملیات لاگینگ استفاده می شود. پس از این رویداد صفحه وب از حافظه سرور حذف می شود.

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

پ.ن : این مطلب در جهت معرفی ASP.NET نوشته شده و مقدمه ای بود در مورد ویژگی های آن. از این پس بیشتر در مورد ASP.NET مطلب خواهم نوشت. دوستان ایراد میگرفتن که چرا در این مطلب از PHP طرفداری کردم و از ASP.NET مطلبی نمی نویسم. از این به بعد از هر دو مطلب خواهم نوشت!