همانطور که در پست قبل گقتم CakePHP از معماری MVC استفاده می کند. این معماری یه الگوی طراحی نرمافزاره که برنامهنویسی بر این مبنا، برنامه رو به سه بخش اصلی تقسیم میکنه:
1- Model مدل به داده برنامه اشاره دارد (معمولا جداول پایگاه داده). 2- View شاید هیچ لفظ فارسی جز خود این واژه نتونه جایگزین خوبی باشه اما این واژه را “نما” تعریف میکنم. نما در حقیقت یه رندر تصویری از داده مدل هست که در انتها به مرورگر کاربر ارسال میشه. 3- Controller کنترل کننده (کنترلر) درخواستهایی که توسط کلاینت ایجاد شده را بررسی و به یه مسیر صحیح هدایت می کند.
نمودار زیر چرخه معماری MVC را در CakePHP توضیح می ده:

برای مثال فرض کنید یه کلاینت بنام ریکاردو بر روی یک لینک (بالفرض خرید کیک که لینکی شبیه زیر داره) در صفحه اصلی برنامه کلیک کنه بنابراین درخواست از مرورگر وی به وب سرور منتقل میشه.
http://www.example.com/cakes/buy
در اینجا dispatcher آدرس درخواستی رو بررسی میکنه (cakes/buy/) و این درخواست رو به یک کنترلر صحیح هدایت میکند. کنترلر، منطق مشخص برنامه رو انجام میده، برای مثال چک می کنه آیا ریکاردو تا حالا لاگین کرده یا نه. علاوه براین کنترلر بمنظور دستیابی به دادههای برنامه از مدل ها استفاده می کنه. مدل ها معمولا نمایانگر جداول پایگاه داده هستند اما می تونن معرف ورودیهای LDAP، فیدهای RSS یا فایلهای روی سیستم هم باشند. بعنوان مثال در اینجا کنترلر یه مدل رو به کار میبره تا آخرین خرید ریکاردو رو از دیتابیس بکشه بیرون (به اصطلاح Fetch کنه).
وقتی کنترلر کار خودش رو بر روی داده انجام داد نوبت مرحله نما میرسه. همانطور که گفتم در نما داده هایی که آمادهسازی شدن به کلاینت عرضه میشن. بعبارت سادهتر کلایت بطور معمول می تونه از طریق مرورگر نتیجه رو مشاهده کنه. در کیک، خروجی نما، بصورت HTML است اما بر حسب نیاز می تونه بسادگی به فرمت PDF، XML و JSON تبدیل بشه.
اما مزایا استفاده از MVC چیست؟
ببینید این معماری مورد آزمون قرار گرفته و بعنوان یک الگوی طرحی نرمافزار مورد قبول واقع شده چرا که برنامه رو قابل نگاهداری و ماژولار میکنه و به امر توسعه سرعت میده. تقسیم عملکرد برنامه در سه بخش مدل، نما و کنترلر پایداری رو بدنبال داره. ویژگی های جدید بسهولت افزوده میشن و چهره جدید ویژگی های قدیمی رو بهبود می ده.
همچنین طراحی جداگانه و ماژولار به طراحان و توسعهدهندگان این اجازه رو میده که همزمان با هم کار کنند و به سرعت بر توانایی نمونه اولیه بیفزایند. جداسازی یه خوبی دیگه هم داره اینکه به توسعهدهندگان این امکان رو میده که تغیرات مورد نظر رو در یک بخش لحاظ کنند بدون اینکه نیازی باشه سایر بخشها تغییری بکنه.
اگر تا حالا برنامه ای رو به این سبک نساخته اید، یه خورده وقت میبره تا این معماری رو بکار ببرید. اما مطمنم برای اولین بار که یه برنامه با کیک پیاچپی بسازید دیگه حاضر نخواهید شد از یه روش دیگر انجامش بدید. در پستهای آینده به شرح تنظیمات و پیکربندی CakePHP خواهم پرداخت.
+ [منبع]
Shaho
مرسی. گرچه php کار نیستم، ولی دوسشون دارم!.
September 22, 2008 at 12:43 am
صالح
مرسی مرتضی جان. خیلی خوشحالم کسی پیدا شده تو وبلاگستان فارسی که داره این موضوع را اموزش میده.من یکی فقط منتظر به روز کردن وبلاگت هستم. ممنون میشم زود به زود به روز اپدیت کنید.
September 23, 2008 at 3:48 pm
نبی
از مطلب مفیدت تشکر میکنم.
البته تعاریف زیادی از CakePHP شنیدم و فیلم های آموزشیش هم دیدم اما نمیدونم چرا اخلاقم اینجوریه که دلم راضی نمیشه به یه برنامه آماده تکیه کنم. من برای خودم یه فریم ورک ساختم و در چهارچوب قوانین خودم برنامه ها رو مینویسم. البته تا حد امکان سعی کردم معماری MVC رو لحاظ کنم.
راستی شاید بهترین معادل فارسی برای view ، کلمه “نمایش” باشه.
خوش باشی
September 25, 2008 at 10:11 am
ادهم
ممنون از مطالبی که مینویسید خصوصا این دو پست آخر.
بی صبرانه منتظر پستهای بعدی شما دربارهی CakePHP ام.
September 27, 2008 at 10:36 am
کامران
سلام من خیلی علاقه دارم به این موضوع ممنون میشم بیشترراهنمایی کنید .
October 28, 2008 at 9:32 am
حامد
با تشکر از شما
November 19, 2008 at 3:49 pm
CakePHP، ابزار توسعه « Moshtaghi.ir
[…] مقدمهای بر معماری MVC در CakePHP یا ترجمه آن از مرتضی الوانی. درباره این […]
November 25, 2008 at 5:15 pm
پیام
ممنون
موفق باشید
March 7, 2009 at 2:43 pm
سلمان
من از php استفاده نمیکنم، اما از ASP.NET MVC که استفاده کردم مزیت خاصی رو توش ندیدم،
منم php کار نیستم اما php کارهارو دوست داردم D-:
June 4, 2010 at 8:25 pm
حسن موحد
تازه به نوشته هاتون دست پیدا کردم ولی بسیار جذاب دلربا هستن . مخصوصا برای من که پی اچ پی کارم .
December 22, 2010 at 7:13 pm