حدود ۵ سال پیش نخستین بار با معماری MVC آشنا شدم و از همان زمان شیوه کارم را به طور کامل با آن منطبق کردم.
معماری MVC که مخفف Model–view–controller است، با هدف کاهش پیچیدگی و نگهداری و توسعه آسان نرم افزار، آن را به سه جزء که در ارتباط با هم هستند تفکیک می کند:

- مدل: حاوی داده های نرم افزار، روابط، قوانین و منطق.
- نما: اطلاعات را از مدل می گیرد و آن را به وسیله ی مولفه های مختلفی برای کاربر نمایش می دهد.
- کنترل گر: ورودی ها را دریافت می کند و دستورات بروزرسانی در مدل و همچنین دستوراتی به نمای مرتبط با آن صادر می کند.

ام وی سی را به انواع مختلفی به کار می برند و مختص نرم افزارهای تحت وب نیز نیست، ولی در ادامه سعی کرده ام به این معماری و اجزای آن، آن گونه که در وب متداول است بپردازم؛ برای این منظور لایه هایی را که در سیستم چارچوب نرم افزاری Savang به کار برده ایم، به طور مختصر توضیح خواهم داد.

در سیستم های تحت وب که نحوه ی ارتباط کاربر با سیستم یا از طریق وارد کردن URL صفحه و یا کار با فرم هاست، کنترل جریان مربوط به سه جزء مذکور به این شکل اتفاق می افتد:

کاربر درخواست خود را با وارد کردن آدرس یا استفاده از فرم های وب ارسال می کند؛ در این مرحله سیستمی با عنوان Dispatcher یا توزیع کننده که قسمتی از چارچوب نرم افزاری است، آدرس ورودی و همه داده های GET و POST همراه آن را دریافت می کند و آن را به توابع یا کلاس هایی که برای آن آدرس خاص (در بخش urls اپلیکیشن ها) تعریف شده است ارسال می کند. این مرحله در بخشی از جزء کنترل گر سیستم در معماری MVC اتفاق می افتد.

توابع یا کلاس های مرتبط با این درخواست فراخوانی می شوند، در صورت نیاز تغییراتی در داده های Model اعمال می کند یا اطلاعاتی از آن درخواست می کند، پردازش های مورد نیاز انجام می گیرند و در نهایت خروجی کار را با فراخوانی template مرتبط (html یا هر نوع سند دیگری) به کاربر باز می گرداند.
در این مرحله لایه های views و templates و در صورت نیاز لایه models چارچوب نرم افزاری دخیل بودند و بازگردادن یک صفحه وب به کاربر در جزء نما از معماری MVC اتفاق می افتد.

در این چارچوب لایه ای با عنوان ORM یا Object-relational mapper تعبیه شده که برنامه نویس بدون نیاز به تعریف جداول پایگاه داده و بدون نیاز به نوشتن دستورات Sql داخل کد،‌ جداول طراحی شده خود را در بخش models اپلیکیشن خود و به صورت کلاس تعریف می کند و برای دسترسی به اطلاعات جداول نیز از همین کلاس ها استفاده می کند.


به طور کلی بخش های یک اپلیکیشن که در این سیستم نوشته شود، عبارت اند از:
- Models
- Views
- Templates
- Urls


این مطلب تنها با هدف آشنایی اولیه با این معماری در سیستم های تحت وب نوشته شد. در آینده ای نزدیک آموزش های مفصل تری در این مورد در بخش آموزش ها خواهم نوشت.