الگوی MVC
Symfony بر اساس الگوی کلاسیک وب که معماری MVC شناخته می شود، طراحی شده است . MVC شامل سه بخش زیر است :
بخش Model که در ارتباط با اطلاعاتی است که در نرم افزار استفاده می شود.
بخش View که داده های دریافتی از بخش Model را به یک صفحه وب مناسب برای تعامل با کاربر تبدیل می کند.
بخش Controller که به درخواست های کاربر پاسخ می دهد و از بخش های Model و View بصورت مناسب استفاده می کند مناسب مطرح می کند.
شکل زیر الگوی MVC را نشان می دهد:
معماری MVC منطق کسب و کار (مدل) و نمایش (نمایش) را از هم جدا می کند، که در نتیجه قابلیت نگهداری بیشتری به نرم افزار می دهد. به عنوان مثال، اگر یک برنامه مه بر روی مرورگرهای وب استاندارد اجرا می شده باید روس دستگاه های دستی مثل تلفن های همراه هم اجرا شود، فقط نیاز به یک بخش View ی جدید خواهد بود. می توان بخش های کنترلر و مدل را بدون تغییر استفاده کرد. کنترل کننده کمک می کند تا جزئیات پروتکل مورد استفاده برای درخواست (HTTP، حالت کنسول، پست الکترونیکی و غیره) را از بخش مدل و ویو پنهان بماند.
برای درک کامل الگوی MVC از دوره آموزش برنامه نویسی PHP بر اساس مدل MVC در سایت کدنویسان استفاده کنید.
معماری سیمفونی بر اساس MVC
شکل زیر معماری کلی در چارچوب سیمفونی را نشان می دهد:
با توجه به شکل فوق می بینید که سیمفونی دارای بخش های زیر است:
- Model layer
- Database abstraction
- Data access
- View layer
- View
- Template
- Layout
- Controller layer
- Front controller
- Action
حتماً فکر می کنید که سیفمونی دارای هفت اسکریپت مختلف است و فایل های زیادی برای ایجاد هر قسمت از نرم افزار باید ایجاد کرده و کدنویسی کنید!
اما، Symfony کارها را آسان می کند و در عین حال که که معماری MVC استفاده می کند ،آن را به شکلی بکار می گیرد که توسعه نرم افزار را سریع و بدون دردسر انجام می دهد.
اول از همه،Front controller و Layout برای همه فعالیت های در یک برنامه معمولی ثابت هستند. و شما می توانید کنترل کننده ها و پوسته های مختلف داشته باشید، ولی در همه آنها از یک نسخه از این فایل ها استفاده کنید. Front controller جزء منطقی MVC خالص است، و هرگز نیازی به نوشتن آن ندارید، بلکه Symfony آن را برای شما تولید می کند.
خبر خوب دیگر این که، Database abstraction کلاً نامرئی است و بخش مدل نیز به طور خودکار بر اساس ساختار داده های شما تولید می شوند. این کار کتابخانه Propel است که اسکلت های کلاس و ایجاد کد را فراهم می کند. اگر Propel محدودیت های کلیدی خارجی یا زمینه های تاریخی را تشخیص دهد ، متدهای مختلفی را در اختیار شما قرار می دهد و بصورت کاملا انتزاعی می توانید با پایگاه داده کار کنید. بنابراین اگر در آینده تصمیم بگیرید، موتور پایگاه داده خود را تغییر دهید، نیازی نیست هیچ بخشی از برنامه را تغییر دهید بلکه کافی است فقط یک پارامتر پیکربندی را تغییر دهید.
و آخرین چیزی که باید بدانید این است که منطق ویو را می توان به راحتی بدون نیاز به برنامه نویسی به یک فایل پیکربندی ساده ترجمه کرد.
کلاس های هسته سیمفونی
پیاده سازی MVC در symfony با استفاده از چند کلاس که اغلب با آنها سر و کار خواهید داشت انجام شده است:
- sfController کلاس کنترل است. این کلاس درخواست های کاربران را تفسیر کرده و آن را انجام می دهد.
- sfRequest تمام عناصر همراه درخواست کاربر (پارامترها، کوکی ها، هدر ها و غیره) را ذخیره می کند.
- sfResponse شامل هدر ها و محتویات پاسخ به کاربر است. این شیء در نهایت به یک پاسخ HTML تبدیل شده و به کاربر ارسال می شود.
- متد استاتیک sfContext :: getInstance یک مرجع را برای دسترسی به تمام اشیای اصلی و پیکربندی است و از همه جا قابل دسترسی است.
همانطور که می بینید، تمام کلاس های symfony از پیشوند sf استفاده می کنند، همانطور که متغیرهای هسته symfony در قالب ها از این پیشوند استفاده می کنند . این کار از برخورد نام با کلاس ها و متغیرهای استفاده شده توسط برنامه نویسی جلوگیری می کند و کلاس های هسته چارچوب سیمفونی را آسان و قابل تشخیص می کند.