mvc در php


بهتره جمله ام رو اینطوری شروع کنم : شاید دارم اشتباه می کنم

 

طرح های زیادی رو در مورد ام وی سی توی نت دیدم و نگاشون کردم و این وسط هم چند سالی هست که دارم باهاش سرو کله می زنم ... بعد از طراحی فریم ورک چیتا هم عمیقا به فکر فرو رفتم که این طرح ام وی سی که توی اکثر فریم ورک ها داره پیاده میشه ناقصه ... مثلا توی yii  وقتی از $this  استفاه می کنیم داریم به متدهای کنترلر اشاره می کنیم و این با ام وی سی در تناقضه ... بعضی ها هم می گن که ام وی سی بر اساس هر زبان برنامه نویسی باید یه سری تغییرات داشته باشه که خب اینم تقریبا قابل قبوله ...

برای مثال توی شی گرایی اگر وقتی یک متد protected میشه فقط توی کلاسهایی که از هم extend شدن میشه از اون متد استفاده کرد ولی توی اندروید(جاوا) متدهای پروتکتد برای کلاس های عضو یک پکیج(فولدر)  قابل درسترسی هستند حتی اگه اون کلاس ها از هم اکستند نشده باشن ... خب این تناقضه ولی وجود داره ...

در مورد ام وی سی های پیاده شده هم همینطور

خب یه بار ام وی سی رو بررسی می کنیم :

کنترلر : کنترلرها کلاس هایی هستند که به عنوان مغذ سیستم کار می کنن ... اونها داده ها رو از یوزر می گیرن و با استفاده از مدل اون ها رو پردازش می کنن و بعد هم توی ویو به یوزر نمایش می دن

مدل : مدل ها جای پردازش داده ها هستن و اکثرا هم فقط کار با دیتابیس رو انجام میدن ... مدل ها پردازش رو بر اساس درخواست کنترلر انجام میدن یعنی هر گاه کنترلر درخواستی داشته باشه و داده ای رو بخواد پردازش کنه اون رو پردازش می کنن و به کنترلر بر می گردونن .. چیزی که خیلی مهمه اینه که مدل ها نباید به متدهای داخل کنترلر دسترسی داشته باشن

ویو : ویو یه فایل پی اچ پی هستش که مقادیری رو که کنترلر بهش پاس داده رو به یوزر نمایش می ده ... نکته های ویو ... نباید به متدهای کنترلر و یا مدل دسترسی داشته باشه و در کل هیچ پردازشی نباید توی ویو انجام بشه و کارش صرفا نمایش اطلاعاته

خب این کلیت کار ام وی سی بود ... با این حساب $this ‌نباید توی ویو به هیچ متدی اشاره کنه .

چیزی که بیشتر وقت ها منو درگیر می کنه اینه که وقتی یه مدل به یه داده توی کنترلر نیاز داره چطوری اون رو بگیره ... خب شاید جواب این باشه که اون رو همراه با متد از کنترلر بخواد که گاهی این اتفاق شدنی نیست . این وسط چاره کار رو توی هلپر ها پیدا کردم

Helper : هلپرها یه سری کلاس هستن که پردازشهای مشترک بین مدل ویو و کنترلر رو انجام میدن و اکثرا هم برای کم کردن حجم کد استفاده میشه ... توی مجنتو هلپرها به توسط مدل و ویو و کنترلر قابل دسترسی هستن ...

توی فریم ورک چیتا هلپرها رو ایجاد کردم و به راحتی میشه اون ها رو از طریق کنترلر و یا شی اصلی فریم ورک chita::hepler فراخوانی کرد و از اون ها استفاده کرد .

در اینده در مورد بلاک هم می نویسم :)

 

۱۳۴۸/۱۰/۱۱ || in category : پی اچ پی php