بعد از این درس دقیقاً چه بلدی؟
- موضوع «Has-a» را با زبان ساده برای فرد دیگری توضیح میدهی.
- مثال همین درس را خطبهخط میخوانی و خروجی آن را پیشبینی میکنی.
- کد را تغییر میدهی، نتیجه یا ساختار آن را بررسی میکنی و خطا را مرحلهای اصلاح میکنی.
تیم کاری
فروشگاه خودش پستچی نیست؛ یک سرویس ارسال دارد و کار را به آن میسپارد. تعویض شرکت ارسال نیازمند بازسازی فروشگاه نیست.
Composition رابطه «دارای یک» است. هر کلاس مسئولیت خودش را دارد و شیءها از طریق قرارداد روشن با هم همکاری میکنند.
چرا مهم است؟ این مفهوم یکی از آجرهای مسیر حرفهای PHP است. فعلاً لازم نیست همه جزئیات را حفظ کنی؛ باید دلیل استفاده و اثر هر خط را بفهمی.
اولین تمرین تو: OrderService سفارش را ثبت میکند و برای اعلان، به MessageSender وابسته است؛ خودش منطق ایمیل را نمیداند.
اول بفهم، بعد کد بنویس
Has-a
یک شیء برای انجام بخشی از کار، شیء دیگری دارد.
Delegation
مسئولیت به همکار متخصص واگذار میشود.
Loose coupling
وابستگی به قرارداد است نه جزئیات یک پیادهسازی خاص.
سرویس سفارش و ارسال پیام
OrderService سفارش را ثبت میکند و برای اعلان، به MessageSender وابسته است؛ خودش منطق ایمیل را نمیداند.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
کد را کامل کن و ساختار آن را بررسی کن
این درس وارد قابلیتهای سروری یا حرفهای شده است. برای امنیت سایت، کد دلخواه روی سرور اجرا نمیشود؛ بررسیگر، وجود اجزای ضروری و منطق مورد انتظار را کنترل میکند و راهنمای اصلاح میدهد.
کد را کامل کن و «بررسی ساختار» را بزن.
این مثال خطبهخط چه میگوید؟
فعلاً حفظ نکن؛ هر خط را به یک جمله ساده تبدیل کن.
- 1
<?phpاز اینجا مفسر PHP شروع به خواندن کد میکند.
- 2
interface MessageSender {یک قرارداد یا نوع جدید برای سازماندهی مسئولیتهای برنامه معرفی میشود.
- 3
public function send(string $message): void;یک کار نامگذاریشده تعریف میشود تا منطق آن قابل استفاده دوباره و قابل آزمون باشد.
- 4
}مرز یک بلوک یا فراخوانی در اینجا باز یا بسته میشود.
- 5
final class OrderService {این خط بخشی از منطق اصلی مثال است؛ نامها و علامتها را از راست به چپ، بخشبهبخش بخوان.
- 6
public function __construct(private MessageSender $sender) {}یک کار نامگذاریشده تعریف میشود تا منطق آن قابل استفاده دوباره و قابل آزمون باشد.
- 7
public function place(): void {یک کار نامگذاریشده تعریف میشود تا منطق آن قابل استفاده دوباره و قابل آزمون باشد.
- 8
// ثبت سفارشاین خط توضیح برنامهنویس است و اجرا نمیشود.
- 9
$this->sender->send("سفارش ثبت شد");این خط بخشی از منطق اصلی مثال است؛ نامها و علامتها را از راست به چپ، بخشبهبخش بخوان.
- 10
}مرز یک بلوک یا فراخوانی در اینجا باز یا بسته میشود.
- 11
}مرز یک بلوک یا فراخوانی در اینجا باز یا بسته میشود.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
پیادهسازی EmailSender و FakeSender برای تست بساز.
از ساده به چالشی، بدون پرش
یکی از مقدارهای مثال را عوض کن، خروجی را روی کاغذ حدس بزن و سپس بررسی کن.
پیادهسازی EmailSender و FakeSender برای تست بساز.
سناریوی «سرویس سفارش و ارسال پیام» را با نامهای واضحتر و یک حالت تازه گسترش بده.
این سه اشتباه را انجام نده
ساختن وابستگی با new داخل منطق اصلی
دانستن جزئیات بیش از حد درباره همکار
کلاس همهکاره با مسئولیتهای متعدد
5 پرسش کوتاه؛ مطمئن شو واقعاً یاد گرفتهای
برای هر پرسش یک پاسخ انتخاب کن. بعد از هر انتخاب، دلیل پاسخ را همانجا میبینی.
Composition معمولاً چه رابطهای است؟
کدام توضیح، «Has-a» را دقیقتر بیان میکند؟
بهترین قدم بعد از خواندن مثال این درس چیست؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
درس را فقط وقتی تمام کن که کد را تغییر دادهای
دیدن آموزش کافی نیست؛ یک مقدار را تغییر بده، خروجی را پیشبینی کن و بعد اجرا بزن.