معرفی الگوی معماری MVC

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

دیاگرام الگوی معماری MVC

برای شروع یادگیری چارچوب MVC تسلط به اصول شی‌گرایی توصیه می‌شود. الگوی معماری MVC در اکثر فریمورک‌ها استفاده شده است، بنابراین پیش‌نیاز درک نحوه کار فریمورک‌ها، آشنایی با این الگوی معماری است.

الگوی معماری MVC

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

روتر (Router)

در MVC ایده کلی، وجود یک فایل index.php برای ارسال کلیه درخواست‌ها به آن است، درخواست‌ها با کمک روتر، مسیریابی می‌شوند. روتر کنترلر مورد نظر را فراخوانی میکند و کار روتر همینجا تمام می شود. دفت کنید که وظیفه روتر در برخی فریمورک‌ها بیشتر است که در بخش‌های بعدی مربوط به MVC این مورد را کاملتر توضیح خواهیم داد، فعلا در همین حد از ما بپذیرید که روتر یا مسیریاب وظیفه مسیریابی درخواست‌های کاربر را دارد.

کنترلر (Controller)

در بخش روتر توضیح دادیم که کار روتر چیست، اما شاید بپرسید دلیل استفاده از روتر چیست، مستقیما از کنترلر استفاده کنیم، فرض کنید کاربر آدرس زیر را فراخوانی کند:

index.php?c=controller&m=action&param1=val1&param2=val2

در فایل روتر مشخص شده که این کد باید کدام اکشن از کدام کنترلر را فراخوانی کند و پارامتر را به آن تحویل دهد. همانطور که متوجه شده‌اید کنترلر یک کلاس است که برای پردازش درخواست‌های ارسالی به لینک‌های مشخص ساخته شده است، اکشن نیز متدی از این کلاس است که وظیفه خاصی را انجام دارد. البته شاید بابت کاربرپسند بودن لینک‌های بالا مشکل داشته باشید که با فعال‌سازی ماژول mod_rewrite می‌توانید لینک‌های خود را مثلا به شکل زیر یا هر شکلی دوست دارید اختصاصی‌سازی نمایید:

baversion.com/class/method/param1/param2/

حتی می‌توانید به روتر بگویید که برای درخواست‌هایی که مثلا به آدرس baversion.com/blog ارسال شد، متد index از کلاس Blog را فراخوانی کند که می‌گویند اکشن index از کنترلر Blog فراخوانی شده است، پارامترهای بعدی نیز ممکن است با استفاده از دستورات مشخص شده در روتر، حتی کنترلر و اکشن دیگری را فراخوانی کند، مثلا برای وبلاگ کلاسی باشد که یک اکشن مسئول پردازش درخواست‌های مربوط به پست‌ها، اکشن دیگر مربوط به دسته‌بندی‌های مطالب و هر اکشنی برای یک عملی باشد، برای صفحه مدیریت کنترلر Admin و با توجه به درخواست‌های مختلف، اکشن‌های متفاوتی فراخوانی شوند. در واقع کنترلر یک کلاس برای اجرای دستورات خاصی توسط متدهایش است، که روتر با توجه به قواعد تصمیم می‌گیرد که چه کنترلر و اکشنی باید فراخوانی شود و روتر کاری به اینکه کنترلر در بدنه متدش قرار است چه کاری انجام دهد ندارد. علاوه بر این کنترلر واسطی بین مدل و ویو است، یعنی وظیفه کنترلر این است که درخواست و پارامترها را پردازش کند و تصمیم بگیرد که آیا نیاز است که مثلا داده‌ای ذخیره یا تغییر داده شود، یا باید چیزی نمایش داده شود.

مدل (Model)

مستقیما داده‌ها، منطق و قواعد برنامه را مدیریت می‌کند، کار با بانک اطلاعاتی. دستورات CRUD در این قسمت نوشته می‌شوند و تمام ارتباطات با دیتابیس باید از طریق همین لایه انجام پذیرد. مهمترین بخش از منطق برنامه مدل است. کنترلر ورودی‌ها را دریافت و تبدیل به دستوراتی برای مدل و ویو می‌کند، اگر این دستورات قرار باشد کار ذخیره داده مثلا ویرایش یک فایل یا تغییر یا افزودن داده‌ای در دیتابیس را انجام دهند، متد مورد نظر از مدل فراخوانی می‌شود و مدل وظیفه‌اش را انجام می‌دهد و در صورت نیاز داده‌هایی را برمی‌گرداند، کنترلر دوباره داده‌ها را بررسی می‌کند تا ببیند نیاز است مدل دیگری فراخوانی شود یا باید آن‌ها را برای نمایش به ویو بدهد.

ویو (View)

این لایه وظیفه نمایش محتوا به کاربر را دارد، همچنین اطلاعات و ورودی‌های کاربر را نیز گرفته و به لایه کنترلر می‌دهد و مانند مدل ارتباطی دو طرفه با کنترلر دارد. ویو داده‌ها را در قالب مناسب نمایش می‌دهد.

تگ‌ها