Philocode – Telegram
Philocode
کتاب جدیدی که خوندنش رو شروع می‌کنم. مقدمۀ این کتاب رو قبلاً خونده بودم که توضیحات خوبی دربارۀ شیءگرایی و اصول SOLID داره ولی این بار ان شاء الله تا آخرش می‌ریم که ببینیم واقعاً نویسنده (Alexander Shvets) چقدر به قولش عمل کرده و توی این دیزاین‌پترن‌ها عمیق…
وقتی ساختن یک آبجکت حالت‌های مختلفی داره (مثلاً خونه یه نبش داره، دو نبش داره، ممکنه مغازه داشته باشه یا نداشته باشه، باغچه داشته باشه یا نداشته باشه و...)، یه راه اینه که به ازای حالت‌های مختلف، subclass بسازیم. اینجا Builder Pattern وارد صحنه می‌شه و می‌گه من راه‌حلم.
🤩1
Philocode
کتاب جدیدی که خوندنش رو شروع می‌کنم. مقدمۀ این کتاب رو قبلاً خونده بودم که توضیحات خوبی دربارۀ شیءگرایی و اصول SOLID داره ولی این بار ان شاء الله تا آخرش می‌ریم که ببینیم واقعاً نویسنده (Alexander Shvets) چقدر به قولش عمل کرده و توی این دیزاین‌پترن‌ها عمیق…
حتی یک تغییردادن ساده در یک کدبیس monolithic بسیار سخت است؛ زیرا باید تمام سیستم را به خوبی درک کرده باشید. اما تغییردادن ماژول‌های کوچک‌تر که به خوبی تعریف شده باشند، بسیار آسان‌تر است.
👍2🔥2
پرسیدن از دیزاین‌پترن‌ها توی مصاحبه (به شکلی که رایجه) صرفاً نشون می‌ده که طرف مطالعۀ تئوریک داشته یا نه.

مثلاً می‌پرسی: دربارۀ دیزاین‌پترن wrapper توضیح بدید!
این بنده‌خدا هم برای اولین‌بار اسم wrapper به گوشش خورده! البته بلده، ولی اون رو با اسم decorator می‌شناسه!

یک دیزاین‌پترن ممکنه اسم‌های مختلفی داشته باشه (کتاب GoF به اسم‌های مختلف اشاره می‌کنه) و اینکه کسی یک اسم رو یادش نیاد یا ندونه، دلیل نیست که طراح خوبی نباشه.

به جای این کارها، براشون یه مسئله طرح کنید و ببینید چه‌طوری حلش می‌کنند!
👍3
تفاوت Decorator و Strategy: اولی به شما امکان این را می‌دهد که پوستۀ آبجکت را تغییر دهید، اما با دومی می‌توان هسته را تغییر داد.
👍3
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