Philocode – Telegram
Philocode
تفاوت Decorator و Strategy: اولی به شما امکان این را می‌دهد که پوستۀ آبجکت را تغییر دهید، اما با دومی می‌توان هسته را تغییر داد.
وقتی از Facade pattern استفاده کنید که می‌خواهید رابط (interface) محدود اما سرراستی برای یک subsystem پیچیده ایجاد کنید. این پترن یک میانبر (shortcut) برای پراستفاده‌ترین قابلیت‌های subsystem که نیازمندی‌های client را برآورده می‌کنند به وجود می‌آورد.
👍1
تفاوت Proxy و Decorator: غالباً اولی خودش آبجکتش را با life cycle آن مدیریت می‌کند، اما در Decorator این مدیریت توسط client انجام می‌شود.
1
👍32
این دستگاه، برای توسعه باز و برای تغییر بسته است. می‌توانیم بخش دیگری طراحی کنیم که الگوریتم دیگری را پیاده کند، بعد بدون اینکه اصل ابزار تغییر کند -مشخصا یک اینترفیس وجود دارد- به دستگاه وصل شود و قابلیت آن را توسعه دهد.
#SOLID
🔥2
چند سؤال مصاحبه:
- در PHP، چگونه می‌توانیم از subclass به superclass دسترسی داشته باشیم؟
- برای یک ادیتور، ساختاری طراحی کنید که بدون تغییر، تگ‌های جدیدی معرفی شود.
- در Laravel، یک دستور به artisan اضافه کنید که لیست routeها را در یک فایل html قرار دهد.
- تفاوت overloading و overriding را توضیح دهید.
👍3🔥1
توی جاواسکریپت، ()Date یه string بهمون می‌ده، اما خروجی ()new Date یه آبجکته.
👍2
سوال: چرا توی Typenoscript نباید از any به عنوان type استفاده کرد؟
جواب: بیکاز ما از typeها استفاده می‌کنیم تا به باگ‌های کمتری بخوریم و توسعه، راحت‌تر و مطمئن‌تر بشه. اگه قراره از any (هرچی!) استفاده کنیم، دیگه چرا از Typenoscript استفاده می‌کنیم؟! می‌ریم همون Javsacriptمون رو می‌نویسیم!
👍3🔥2
const something = undefined

if (!something) { console.log('Yep') } else { console.log('Nope') }
Anonymous Quiz
56%
Yep
44%
Nope
🔥3
console.log(typeof [1, 2, 3])
Anonymous Quiz
12%
'number'
46%
'object'
30%
'array'
12%
هیچ‌کدام
🔥3
Philocode
console.log(typeof [1, 2, 3])
پس فهمیدیم که
typeof ['chiz', 'another chiz']
میشه 'object'، اگه خواستید آرایه‌بودن رو چک کنید، یه کار ساده اینه که بفرمایید:
Array.isArray(['chiz', 'another chiz'])

اون چند نفری که گزینۀ اول رو انتخاب کردن رو هم زنده می‌خوام!
👍1
کتاب جالبی به نظر میاد... 🤔
#books
👍2
کلاس‌هایی که دپندنسی کلاس‌های دیگه هستن، باید خیلی خوب و واضح نوشته بشن. اگه مشکلی باشه، باید یه Exception بدن تا رفتارشون مارو فریب نده. مثلاً جایی که درست کار نکرده، null برنگردونید، تا کدی که ازش استفاده می‌کنه، متوجه خطا بشه. کلید اینه که خطاها باید داد بزنن، نه اینکه پنهان بشن.
👍2🤔1
امشب این کتاب رو شروع کردم.
به نظر کتاب خیلی خوبی میاد.
#books #manning
👍2🔥1
چی شد؟! 😂
😁2
Philocode
چی شد؟! 😂
این اتفاق وقتی می‌افته که توی اسم فایل view از نقطه استفاده کرده باشید:
return view('payment.callback');
لاراول نقطه رو با slash جایگزین می‌کنه و در نتیجه خیال می‌کنه که فایل شما اینجاست:
resources
/ views
/ payment
callback{.extension}

درحالیکه فایل شما اینجاست:
resources
/ views
/ payment.callback{.extension}
👍2🔥1
وقتی که یه سرویس نیاز داره کانفیگی رو از سیستم داشته باشه...
مثال: کلاس Payment می‌خواد بدونه که کدوم درگاه پرداخت، فعاله.

کانفیگ ما ممکنه متغیر سراسری (global) باشه، از دیتابیس خونده بشه یا هرچیزی. مهم نیست.

اینجا سرویس ما روی کانفیگ‌هامون وابستگی (dependency) داره، ولی نیازی نیست کل کانفیگ رو بهش پاس بدیم:
class Payment
{
private $config;

public function __construct(AppConfig $appConfig)
{
$this->config = $appConfig;
}
}

به‌جای اینجکت‌کردن کل آبجکت، فقط مقداری رو اینجکت کنید که سرویس واقعاً بهش نیاز داره. آبجکت appConfig ممکنه صدتا مقدار مختلف داخلش باشه و سرویس Payment جز یکی، نیازی به بقیه‌شون نداره.
🔥1
Philocode
امشب این کتاب رو شروع کردم. به نظر کتاب خیلی خوبی میاد. #books #manning
ماتیاس نوباک میگه که آبجکت‌ها دو نوع هستند:
+ Services
+ Other objects:
- Value objects
- Entities (models)
نوع اول باید immutable باشه، بر خلاف نوع دوم که می‌تونه دستکاری بشه.
👍1
گزینۀ درست، a و d می‌شه؛ چون مقدار Money یه مقدار حداقلیه و چیزی نیست که با setter تعیین بشه؛ یعنی هر آبجکتی از Money حتماً مبلغی داره. برای جلوگیری از حالت ناپایدار (inconsistent state) در این آبجکت، باید مقدار 100 و همچنین ارز USD رو توی constructor پاس بدیم.
👍1