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

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

در معماری MVC کنترلر (Controllers) بخشی است که تصمیم‌گیری‌ها و منطق نرم‌افزار در آن نوشته می‌شود.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

درباره نویسنده

فایقه ربانی، برنامه نویس و طراح سایت