آشنایی با Controller ها در فریم ورک MVC
آشنایی با Controller ها در فریم ورک MVC

در معماری MVC کنترلر (Controllers) بخشی است که تصمیم‌گیری‌ها و منطق نرم‌افزار در آن نوشته می‌شود و برای حرکت بین Model و View عمل می‌کنند در واقع کنترلرها واحدهای اصلی و مرکزی پروژه ASP.NET MVC هستند. کنترلرها اطلاعات را از سرور دریافت می‌کنند و درخواست‌های HTTP Request ورودی را پردازش می‌کنند و تصمیم می‌گیرند در جهت اجرای درخواست‌های HTTP کدام مدل یا مدل‌ها انتخاب شوند تا اطلاعات را از مبدل دریافت کرده و آن‌ها را به View انتقال می‌دهند. در نتیجه خروجی توسط View تولید شده به کاربر نمایش داده می‌شوند.
 در دوره رایگان آموزش asp در فصل سوم معماری و فریم ورک mvc در asp.net core را آموزش داده ایم برای تسلط کامل بر این موضوع می توانید این فصل و دوره را مشاهده کنید.

 


در فریم‌ورک MVC معمولاً Controllerها را در پوشهٔ Controllers قرار می‌دهند . 
و اگر تعداد آنها زیاد باشد برای جلوگیری از سردرگمی و مدیریت بهتر فایل‌ها می‌توانیم در پوشهٔ Controllers پوشه‌های دیگر ایجاد کنیم و از آنها برای تقسیم‌بندی کنترلرها استفاده کنیم.

 

controllers-in-the-MVC-framework


 

ساخت کنترلر جدید

برای ساختنControllerجدید روی پوشه یControllers راست کلیک و گزینهAdd  را میزنیم و در مرحله بعد گزینه یController  را انتخاب میکنیم.

 mvc

 

 

در صفحه‌ای که باز می‌شود 6 گزینه وجود دارد، سه گزینه بالایی به ما MVC Controllerهایی ارائه می‌دهد که برای برنامه‌های Asp.net mvc استفاده می‌شود و سه گزینه پایین Controllerهایی از جنس API به ما ارائه می‌دهد.

زمانی که شما یک برنامهٔ Web API می‌نویسید و هدف این است که به کاربران یک API(وب‌سرویس) ارائه دهید از سه گزینه پایین استفاده می‌کنید.

.controllers-in-the-MVC-framework

 

حالا تفاوت گزینه‌ها را بررسی می‌کنیم.

گزینه اول: یک کنترلر خالی برای ما ایجاد می‌کند.

گزینه دوم: با استفاده از Scaffolding یک کنترلر برای ما ایجاد می‌کند و داخل این کنترلر چندین اکشن که موردنیاز عملیات کراد هستند قرار دارد.  Scaffolding  قسمتی در Visual studio ست که برای تولید خودکار کدها به کار برده می‌شود. یک سری کدها وجود دارند که همه‌جا تکراری هستند و تقریباً یک‌شکل دارند که با استفاده از اسکفلدینگ می‌توان خودکار این کدها را تولید کرد.

گزینه سوم:اگر شما EF را روی پروژه نصب‌کرده و اتصال به دیتابیس را انجام داده باشید، با استفاده از این گزینه کنترلری ایجاد می‌شود که علاوه بر اکشن‌های کراد، ویوهای مربوط به این اکشن هم برای ما ایجاد می‌کند و بدون نیاز به کدنویسی می‌توان عملیات کراد را بر روی یکی از Entityها انجام داده و زمانی که پروژه اجرا می‌کنید و به این کنترلر مراجعه می‌کنید، می‌بینید که تمام عملیات کراد برای شما انجام می‌شود. دیتا از دیتابیس خوانده می‌شود، می‌توان دیتا اضافه، ویرایش و یا حذف کرد.

سه گزینه پایین هم دقیقاً کار سه گزینه اول را برای API Controllerها انجام می‌دهند.

 

برای نمونه یک پروژهٔ mvc از نوع Empty انتخاب می‌کنیم و یک نام برای پروژه انتخاب می‌کنیم. قانون نام‌گذاری کنترلرها در فریم‌ورک mvc به این شکل هست که بعد از نامی که برای کنترلر انتخاب کردیم باید کلمه Controller را به انتهای نام اضافه کنیم.

controllers-in-the-MVC-framework

کنترلرهایی که به برنامه اضافه می‌کنیم در واقع کلاس‌های سی شارپ هستند و با اضافه‌کردن کلمهٔController به انتهای نام کنترلر فریم‌ورک MVC تشخیص می‌دهد که آیا این یک کنترلر است یا نه البته راه‌های دیگر هم برای تشخیص کنترلرها وجود دارد که در ادامه بررسی می‌کنیم.

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

حالا یک کنترلر جدید به نام blogController ایجاد می‌کنیم داخل این کنترلر اکشنی به نام Index وجود دارد (این اکشن‌ها دقیقاً متدهای سی شارپ هستند). مقدار برگشتی این متد متنی است که درون این اکشن نوشته شده و از نوع string است.

  

controllers-in-the-MVC-framework

 

حالا وقتی برنامه رو اجرا کنیم و به این اکشن و کنترلر درخواست بدیم، رشته باید در خروجی نمایش داده شود.

 

controllers-in-the-MVC-framework

برنامه به‌صورت پیش‌فرض یک کنترلر و یک اکشن دارد که یک ویو هم دارد وقتی پروژه اجرا می‌شود با استفاده از تنظیمات مسیریابی که در ادامه آموزش می‌دهیم صفحهٔ پیش‌فرض ما می‌شود home و Index که در ادامه باهم بررسی می‌کنیم.

حالا ما کنترلری به اسم BlogController و درون آن اکشنی به نام Index ساختیم، حالا می‌خواهیم به اکشن Index درخواست بدهیم. سیستم مسیریابی در Asp.net core به این صورت است که بعد از نام دامنهٔ وب‌سایت باید نام کنترلر وارد شود و بعد از آن نام اکشن . (مطابق شکل زیر)

 

 

controllers-in-the-MVC-framework

وقتی درخواست رو به اکشن ارسال می‌کنیم دقیقاً متنی که در اکشن Return کرده بودیم در خروجی می‌بینیم، پس به این صورت می‌توان درخواستی به اکشن ارسال و پاسخ دریافت کرد.

 

راه‌های تشخیص یک کنترلر

در فریم‌ورک MVC از سه طریق می‌توان تشخیص داد یک کلاس از نوع کنترلر هست یا خیر

روش اول: کلاس از کلاس Controller ارث‌بری کرده باشد.

-controllers-in-the-MVC-framework

 

کلاس‌هایی که کنترلر باشند، بیرون از پروژه و سرور همهٔ افراد می‌توانند به متدهای پابلیک این کلاس Request ارسال کنند، پس اگر کلاسی داشته باشید و نخواهید که بیرون از پروژه توسط افراد به این کلاس درخواست داده شود و ناخواسته این کلاس را به کنترلر تبدیل کنید خیلی راحت کل اطلاعات را در اختیار عموم قرار داده‌اید. پس خیلی مهم است که کلاس‌های خصوصی به کنترلر تبدیل نشود و هرکجای پروژه
 (داخل پوشهٔ Controllers یا هر پوشه دیگر) کلاسی از Controller ارث‌بری کند این کلاس یک کنترلر محسوب می‌شود.

روش دوم: ختم شدن نام کنترلر با کلمهٔ Controller

یک کلاس جدید به اسم News Controller ایجاد می‌کنیم که یک اکشن به نام Index و از نوع String دارد و اینجا از کلاس Controller ارث‌بری نشده . (مطابق شکل زیر)

controllers-in-the-MVC-framework

 

 

حالا اجرا می‌کنیم و به آن درخواست می‌دهیم (شکل زیر) ، مبینیم که به‌راحتی داده‌ها رو دریافت شد.

 

 

controllers-in-the-MVC-framework

 

 

 

روش سوم: استفاده از Controller Attribute

یک کلاس ساده سی شارپ می‌سازیم به اسم product و داخلش متدی به اسم Getdata از نوع رشته تعریف می‌کنیم.

controllers-in-the-MVC-framework

 

 

حالا اگر به این متد و اکشن درخواست ارسال کنیم با خطای 404 مواجه می‌شویم، یعنی این مسیر روی سرور پیدا نشد .

 

controllers-in-the-MVC-framework

 

 

حالا اگر این کلاس را تبدیل به کنترلر کنیم و اجرا کنیم اطلاعات به‌راحتی قابل‌دسترسی هستند. برای تبدیل این کلاس به کنترلر باید عبارت Controller را قبل از تعریف متد بنویسیم (مطابق شکل زیر)

 

 controllers-in-the-MVC-framework

 

شاید شما دچار این اشتباه نشوید که برای یک کلاس سی شارپ  اتریبیوت Controller تعریف کنید یا برای کلاسی که کنترلر نیست از Controller ارث‌بری کنید ولی اگر یک کلاس ساده که از نوع کنترلر نیست را در انتهای نامش عبارت Controller رو اضافه کنید این کلاس را تبدیل به یک کنترلر کرده‌اید.

 

فرض کنید در یک پروژه برای کنترل داده‌هایی که کاربر وارد می‌کند می‌خواهید عملیات Validation انجام دهید، برای این کار کلاسی به اسم UserDataController تعریف می‌کنید. این کلاس داخل پوشة Controller نیست ولی در واقع یک کنترلر محسوب می‌شود و خارج از پروژه می‌توان به دیتای این کلاس دسترسی پیدا کرد. حالا برای اینکه این کلاس از نوع Controller نباشد و اسم کلاس هم UserDataController باشد باید چه کاری انجام دهیم؟

 

در اینجا فریم ورک mvc یک اتریبیوت به نام Non Controller در اختیار ما قرار می‌دهد که با استفاده از آن می‌توان کلاس را از حالت Controller خارج کرد. با این روش دیگر داده‌های این کلاس خارج از پروژه در دسترس نیست.

 controllers-in-the-MVC-framework

تگ‌ها
اشتراک
0 نظرات

برای ارسال نظر باید وارد حساب کاربری خود شوید
ورود به حساب کاربری ثبت نام

دوره جدید منتشر شد.تا روز یک شنبه می توانید دوره جدید را با 300.000 تومان تخفیف تهیه نمایید.