Symfony در مقابل PHP خالص – بخش اول

Symfony در مقابل PHP خالص – بخش اول

اگر تا به حال از فریم‌ورک‌های PHP استفاده نکرده اید، با فلسفه MVC آشنا نیستید یا فقط در تعجب هستید که چه چیز باعث محبوبیت Symfony شده است این پست برای شما آماده شده است. باید خودتان مشاهده کنید که چطور سیمفونی به شما این امکان را می دهد که برنامه‌های بهتر، سریعتر نسبت به نوشتن PHP از پایه توسعه دهید.

در این پست یک برنامه ساده با PHP خالص خواهیم نوشت و آنگاه آن را با بازنویسی سازماندهی می کنیم. شما در طول مطالعه این پست خواهید دید که چه تصمیماتی باعث شده امروزه توسعه وب نسبت به گذشته تکامل یافته‌تر باشد.

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

یک سیستم بلاگ ساده در PHP خالص

در این پست یک سیستم بلاگ ساده تنها با PHP خالص درست می کنید. برای شروع، یک صفحه ساده درست کنید که مطالب بلاگ را نمایش دهد و همچنین به دیتابیس متصل باشد. نوشتن کد در PHP خالص سریع و کثیف است:

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

 

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

 

مشکل دیگری که در انجای وجود دارد این است که دیتابیس به MySQL گره خورده است. هر چند در این پست به آن اشاره نمی‌شود اما، Symfony کاملا با Doctrine ادغام شده است، کتابخانه‌ای که بطور اختصاصی برای کار بر روی دیتابیس طراحی شده است.

جداسازی منطق برنامه از HTML

کد می تواند بلافاصله از منطق برنامه و کدهایی که برای نمایش HTML نوشته می شود جدا شود:

کد HTML حالا در یک فایل جداگانه (templates/list.php) ذخیره شده است که در واقع یک فایل HTML است که از سینتکس PHP استفاده می کند:

طبق قرارداد، فایلی که شامل کدهای منطق (logic) برنامه است (index.php) به عنوان Controller شناخته می شود. Controller کلمه‌ای است که بارها و بارها صرف نظر از زبان و یا فریم‌ورکی که استفاده می کنید شنیده اید. اشاره به منطقه‌ای از کد دارد که ورودی‌های کاربر را مورد پردازش قرار می دهد و آماده ارسال پاسخ (Response) می‌شود.

در این مورد، کنترولر داده‌ها را از دیتابیس میگیرد و آنگاه قالبی برای نمایش داده‌ها ارائه می دهد. با جداسازی کنترولر، شما به راحتی می تواند تنها با تغییر فایل قالب، مطالب بلاگ خود را در فرمت‌هایی مثل JSON نمایش دهید. (list.json.php)

تا اینجا برنامه ما شامل تنها یک صفحه است. اما اگر صفحه دوم نیاز داشته باشد از همان دیتابیس استفاده کند چه، یا حتی  از همان آرایه از پست‌های بلاگ؟ بنابراین با بازنویسی کدها، عملکرد هسته و توابع دسترسی به داده‌های برنامه، در یک فایل جدید به نام model.php قرار می گیرد:

نام فایل model.php استفاده شده است چون به طور سنتی منطق و دسترسی به داده‌های یک نرم افزار به عنوان لایه مدل شناخته می شود. در یک برنامه به خوبی سازمان‌یافه شده اکثر کدهایی که منطق برنامه را شامل می شوند در مدل قرار می گیرند. و بر خلاف این مثال، تنها یک بخش (یا هیچ کدام) از مدل در واقع نگرانی دسترسی به یک دیتابیس را دارد.

حال کنترلر index.php بسیار ساده و تمیز شده است:

در حال حاضر تنها کار کنترلر گرفتن داده‌ها از لایه مدل برنامه (Model) و فراخوانی یک قالب برای نمایش داده‌ها است. این یک مثال بسیار ساده از الگو Model-View-Controller است.

 جداسازی طرح

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

تنها بخشی از کد که نمی تواند دوباره مورد استفاده قرار گیرد. آن را با ایجاد یک فایل جدید layout.php حل کنید:

حال قالب templates/list.php می تواند به راحتی از لایه مادر استفاده کند (با extend کردن معروف است).

حال این امکان برای شما فراهم شده است که از layout استفاده مجدد کرد. متاسفانه، برای تحقق این کار، مجبور هستید که از چندین تابع زشت مثل ob_start() و ob_get_clean() در قالب استفاده کنید. اما Symfony از کامپوننت Templating استفاده می کند که این اجازه را می دهد به راحتی و به صورت تمیز این کار را انجام دهیم. شما این عمل را در بخش بعدی خواهید دید!


  • محمد

    محشر بود!!

  • کلا کار کردن با فریمورکها هم سرعت پیشبرد کار رو بالا میبره و هم امکان اشتباه رو پائین میاره ..
    از سیمفونی یادی کردی، ولی به نظرم فرزند خلفش لاراول جوون‌تر، چابکتر و پرانرژی‌تر از خودشه ..
    ممنون از وبلاگ خوبت

    • پاتریک درآواکیانس

      بله همیطور است. در ابتدا نیز سراغ لارول رفتم و دیگر فریم ورک ها را قبول نداشتم اما حالا نظرم عوض شده (شاید اشتباه می کنم 🙂 ). درست است که لاراول راحتی برای دولوپر می دهد ولی یکی از دلایلی که سیمفونی ترجیح می دهم، stable بودنش است. 🙂 مرسی از شما، وبلاگ خوبی دارید موفق باشید!