آشنایی با 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

    اطلاعات نویسنده
    • نویسنده: روشن احمدی

    ارسال دیدگاه

    برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربری‌تان شوید


    دیدگاه کاربران