آشنایی با Design Patternیی تحت عنوان MVC



به طور کلی، معماری سه لایه MVC که مخفف واژگان Model View Controller است این امکان را به برنامه نویسان می دهد تا کدهای مرتبط با ظاهر سایت را در قالب View، کدهای مرتبط با روند اجرای وب اپلیکیشن و همچنین ارتباط مابین بخش های مختلف را در Controller و کدهای مرتبط با ارتباط با دیتابیس و ... را در Model قرار دهند.
معماری سه لایه دارای فواید زیادی است که از آن جمله می توان به استفاده مجدد از کدهای هر یک از این لایه ها در سایر بخش های اپلیکیشن اشاره کرد.
در فریم ورک زند 2 معماری سه لایه MVC به صورت زیر پیاده سازی می شود:
Bootstrap به منزله شروع معماری سه لایه اپلیکیشن است. Route چیزی است که از آن طریق درخواست یا Request کاربر به یک کنترلر یا اکشن ضمیمه می شود. Dispatch به فرایندی گفته می شود که از آن طریق کنترلر ارتباط با بخش های مختلف اپلیکشن را کنترل می کند. Render برای نمایش داده هایی است که از طریق UI می بایست در معرض دید کاربر قرار گیرند. و در نهایت Finish که پایان موفقیت آمیز یک معماری سه لایه را مشخص می سازد.
ZF2 از معماری سه لایه MVC با استفاده از کامپوننت های مختلفی استفاده می کند که در ادامه با برخی از رایج ترین آن ها آشنا خواهیم شد.
کامپوننتی تحت عنوان Zend\Mvc\Router در فریم ورک زند 2 داریم که مشخص می سازد کدام ماژول، کنترلر و یا اکشن را می بایست با توجه به درخواست مرروگر کاربر مورد استفاده قرار دهد. در فریم ورک زند دو route ها داخل فایل تنظیمات هر ماژول تعریف می شوند (البته لازم به ذکر است که route ها را در هر جایی از کد می توان مورد استفاده قرار داد اما این در حالی است که با این کار استانداردهای معماری سه لایه را زیر پا گذاشته و خوانایی کد ما پایین خواهد آمد.)
Route ها دارای انواع و اقسام مختلفی هستند که از آن جمله می توان به Literal، Segment، Rexex، Part/TreeRouteStack، Wildcard، Hostname، Scheme و ... اشاره کرد.
برای روشن شدن این مسئله چند مثال می زنیم:
به طور کلی منظور از روتی تحت عنوان Literal آدرسی همچون netshahr.com/contact است که در این URL هرآنچه که پس از / آمده به منزله یک Route می باشد. به عبارت دیگر، هر کاربری که وارد سایت نت شهر شده و پس از دامین سایت، آدرس contact را وارد نماید، روتی که پیش از این برای contact در نظر گرفته ایم فعال خواهد شد.
اگر بخواهیم برای روتی از جنس Segment مثالی بزنیم می توان آدرسی همچون netshahr.com/blog/article/7 را مد نظر قرار دهیم که در این یو آر ال، مسیر article/7 روتی از جنس Segment است.
زمانی که درخواستی از سمت مرورگر کاربر برای وب اپلیکیشن ارسال می شود، اکشنی که با روت همخوانی داشته باشد در ماژولی که هدف قرار داده شده از طریق کنترلر مرتبط با این کار فراخوانده می شود.
در فریم ورک زند 2 کامپوننتی داریم تحت عنوان Zend\Mvc\View که مسئول نمایش داده های درخواست شده به کاربران وب اپلیکیشن ما است. کامپوننت View این دست داده ها را از طریق کنترلرهای مربوطه دریافت می دارد. در فریم ورک زند 2 تمپلیت های مرتبط با رابط کاربری سایت به صورت پیش فرض فایل هایی با پسوند php هستند اما این در حالی است که شما این امکان را خواهید داشت تا از پسوندهای دیگر هم استفاده کرده و یا پسوندهایی که مجاز هستند را با یکدیگر ادغام کنید (به طور مثال پسوند phtml که منظور از آن فایل اچ تی ام الی است که دارای یکسری کدهای پی اچ پی نیز می باشد.)
در معماری سه لایه، Model این امکان را به برنامه نویسان می دهد تا مسائل مرتبط با دیتابیس، داده ها و ... مدیریت کنند. واقعیت امر این است است که مدل کاری بیش از ارتباط با دیتابیس و ... را انجام می دهد. به عبارت دیگر، کلیه کارهای منطقی همچون محاسبات، الگوریتم ها و ... را می توان در مدل یک وب سایتی که با معماری سه لایه طراحی شده باشد تعریف کرد. در یک کلام، مدل در این معماری مسئول این است که وب اپلیکیشن ما چگونه کار می کند.
نکته جالب توجه این که در فریم ورک زند 2 هیچ گونه کلاسی تحت عنوان مثلاً Zend\Model وجود ندارد که بتوان از آن ارث بری کرد و علت این مسئله هم آن است که مدل در هر سایت مختص آن سایت بوده و نمی توان یک منطق کاری را برای کلیه سایت ها در نظر گرفت. به طور مثال، منطق به کارگرفته شده در یک فروشگاه آنلاین با یک سایت خبری همچون نت شهر کاملاً متفاوت خواهد بود.
با این حال یکسری از مدل ها هستند که فارغ از این که سایت ما برای چه منظوری ساخته شده است، مابین کلیه سایت ها یکسان است که از آن جمله می توان به کامپوننتی تحت عنوان Zend\Db\TableGateway اشاره کرد که برای فراخوانی جداول یک دیتابیس مورد استفاده قرار می گیرد. و یا این که اگر بخواهیم از RSS استفاده نماییم، می بایست از کامپوننتی تحت عنوان Zend\Feed که مخصوص این کار است استفاده نماییم.

تگ ها:
مطالب مرتبط
آشنایی با Routing در فریم ورک ZF2
آشنایی با Routing در فریم ورک ZF2
چگونه در فریم ورک زند 2 یک فرم ثبت نام بسازیم
چگونه در فریم ورک زند 2 یک فرم ثبت نام بسازیم
نحوه ساخت یک ماژول جدید در فریم ورک زند 2
نحوه ساخت یک ماژول جدید در فریم ورک زند 2
نظرات