گام 2: معرفی پروژه

5.0 version
Maintained

معرفی پروژه

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

شرح پروژه

از آنجایی که کتاب باید در طول کنفرانس سیمفونی در آمستردام منتشر شود، مرتبط بودن پروژه‌ی انتخابی با کنفرانس و سیمفونی، میتواند جالب توجه باشد. نظر شما در مورد یک guestbook چیست؟ ما در فرانسوی به آن livre d'or می‌گوییم. من احساس قدیمی و از مد افتاده‌ی توسعه یک guestbook در سال ۲۰۱۹ را دوست دارم.

انتخاب ما انجام شد. پروژه درباره‌ی دریافت بازخوردهای مربوط به کنفرانس‌ها می‌باشد: لیستی از کنفرانس‌ها در صفحه‌ی اصلی، یک صفحه برای هر کنفرانس و تعداد زیادی کامنت دلپذیر. هر کامنت از یک متن کوتاه و یک عکس اختیاری در طول کنفرانس تشکیل می‌شود. فکر می‌کنم که حالا تمام جزئیات لازم برای شروع کار را نوشته باشم.

این پروژه شامل چند اپلیکیشن خواهد بود: یک اپلیکیشن تحت وب سنتی با فرانت‌اند HTML، یک API و یک اپلیکیشن تک‌صفحه‌ای (SPA) برای گوشی‌های تلفن همراه. چطور به نظر می‌رسد؟

یادگیری از طریق انجام‌دادن اتفاق می‌افتد

یادگیری از طریق انجام‌دادن اتفاق می‌افتد. مطالعه یک کتاب درباره‌ی سیمفونی دلپذیر است، اما کدنویسی یک اپلیکیشن بر روی کامپیوتر شخصی‌تان به هنگام مطالعه‌ی کتاب، از آن هم بهتر است. این کتاب بسیار ویژه است زیرا همه‌کار کرده‌ام تا این امکان را فراهم آورم که بتوانید کتاب را دنبال کرده،‌ کدنویسی کنید و مطمئن باشید که نتیجه‌ای یکسان با آنچه من بر روی رایانه‌ام دریافت کرده‌ام، دریافت کنید.

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

نگاهی به نمودار زیرساخت نهایی

با اینکه ایده‌ی پروژه ساده به نظر می‌رسد، ما به دنبال ساخت پروژه‌ای "Hello World" گونه نیستیم. تنها از PHP و پایگاه‌داده استفاده نخواهیم کرد و ابزارهای دیگری نیز مورد استفاده قرار خواهد گرفت.

هدف، ایجاد پروژه‌ای شامل برخی پیچیدگی‌های محتمل در دنیای واقعی است. می‌خواهید مدرکی برای اثبات این ادعا ارائه کنیم؟ به زیرساخت نهایی پروژه نگاهی بیاندازید:

../_images/infrastructure.svg

یکی از مزایای بزرگ استفاده از یک چارچوب، مقدار اندک کدی است که برای توسعه‌ی همچین پروژه‌ای مورد نیاز است:

  • ۲۰ کلاس PHP در پوشه‌ی src/ برای وب‌سایت‌؛
  • ۵۵۰ خط کد منطقی (LLOC) به گزارش PHPLOC؛
  • ۴۰ خط کد برای تنظیمات پیکره‌بندی در ۳ فایل (از طریق حاشیه‌نویسی و کد YAML)، که اکثراً برای پیکره‌بندی طراحی بک‌اند نوشته شده‌اند.
  • ۲۰ خط کد برای پیکربندی زیرساخت محیط توسعه (Docker)؛
  • ۱۰۰ خط کد برای پیکربندی زیرساخت محصول (SymfonyCloud)؛
  • ۵ متغیر محیط صریح؛

برای چالش آماده‌اید؟

دریافت کد منبع پروژه

با ادامه‌ی پیروی از سبک و سیاق قدیمی، می‌توانستم یک سی‌دی شامل کدمنبع ایجاد کنم، درست است؟ اما نظرتان درباره‌ی یک مخزن Git جایگزین چیست؟

مخزن guestbook را در جایی بر روی رایانه‌تان Clone نمایید.

1
$ symfony new --version=5.0-4 --book guestbook

این مخزن شامل تمام کدهای این کتاب است.

این نکته را هم به خاطر داشته باشید که ما فرمان symfony new را به جای git clone استفاده می‌کنیم، زیرا این فرمان کارهای بیشتری از فقط Cloneکردن مخزن (میزبانی‌شده در Github، داخل بخش مربوط به سازمان the-fast-track: https://github.com/the-fast-track/5.0-1) انجام می‌دهد. این فرمان اجرای وب‌سرور، کانتینرها، migrateکردن پایگاه‌داده، بارگذاری fixtureها در پایگاه‌داده و ... را نیز آغاز می‌کند و درنتیجه پس از اجرای آن، وب‌سایت درحال‌اجرا و آماده برای استفاده است.

این کد به صورت تضمینی با کدهای داخل کتاب هماهنگ است (دقیقاً از همان آدرس مخزن‌های لیست‌شده در بالا استفاده کنید). تلاش برای هماهنگ‌کردن دستی تغییرات در کتاب با کد منبع درون مخزن تقریباً غیرممکن است. این روش را قبلاً امتحان کرده و شکست خورده‌ام. این کار به صورت دستی غیرممکن است، به خصوص در مورد کتابی مانند این کتاب که در آن داستان توسعه‌ی یک وب‌سایت را بیان کرده‌ام. زیرا هر فصل به فصل قبلی وابسته است و یک تغییر می‌تواند تبعاتی را در تمام فصل‌های بعدی ایجاد نماید.

خبر خوش اینست که مخزن Git مربوط به این کتاب، به صورت خودکار از روی محتوای کتاب تولید می‌گردد. بله، درست خواندید. من دوست دارم همه چیز را خودکار کنم، بنابراین یک اسکریپت وظیفه دارد تا محتوای کتاب را بخواند و مخزن Git را از روی آن ایجاد کند. این کار یک اثر جانبی مثبت دارد: هنگامی که کتاب به‌روز می‌گردد، اگر تغییرات ناسازگار بوده یا به‌روزرسانی برخی دستورات را فراموش کرده باشم، اسکریپت مربوطه اعلام خطا می‌کند و من از وجود ایراد آگاه می‌گردد. این روش توسعه‌ی BDD نام دارد، یعنی توسعه‌ی کتاب محور! (Book Driven Development)


  • « Previous گام 1: بررسی محیط کاری
  • Next » گام 3: حرکت از صفر به سمت محصول نهایی

This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.