Philocode – Telegram
چی شد؟! 😂
😁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
این پکیج لاراولی، کد و ساختار پروژۀ شمارو تحلیل می‌کنه!

https://github.com/nunomaduro/phpinsights
#laravel
🔥2
توی لاراول اینطوری میشه برای Validation Ruleها تست نوشت:
$this->assertFalse(
(new Age())->passes('age', -6)
);

متد ()passes یه attribute و یه value می‌گیره.
#laravel
👍1🔥1
Philocode
ماتیاس نوباک میگه که آبجکت‌ها دو نوع هستند: + Services + Other objects: - Value objects - Entities (models) نوع اول باید immutable باشه، بر خلاف نوع دوم که می‌تونه دستکاری بشه.
می‌فرماید که ما کلاسی داریم که با پول سر و کار داره:
class Converter
{
public function __construct(float $amount, string $currency) { ... }
}

اما ممکنه که مقادیر غیر مجاز برای این دو پارامتر داده بشه، مثلاً برای amount عددی منفی بیاد یا اینکه برای currency مقدار "ABC" بیاد که واحد پول هیچ کشوری نیست! برای اینکه ولیدیشن رو داخل constructor انجام ندیم، اینهارو به عنوان تایپ مستقلی در میاریم:
class Converter
{
public function __construct(Amount $amount, Currency $currency) { ... }
}

خیلی خوب شد، اما مثلاً خروجی ما می‌تونه Amount باشه درحالیکه به Currency هم نیاز داریم؛ به یه عبارت دیگه، این دو مقدار به هم ارتباط دارند و نمی‌خواییم جداشون کنیم، از طرفی توی بخش‌های دیگۀ سیستم ممکنه به هرکدومشون به تنهایی نیاز پیدا کنیم، پس هر دو رو داخل تایپ جدیدی به اسم Money می‌ذاریم:
class Converter
{
public function __construct(Money $money) { ... }
}
و خود Money هم اینطوری ساخته میشه:
class Money
{
public function __construct(Amount $amount, Currency $currency) { ... }
}
👍2
I can do it this way:
http://localhost
And if I want it to be fancy I can do it this way:
http://127.0.0.1
And if I want it to be even fancier:
http://[::1] 😵‍💫😂
#HusseinNasr
🔥2
امشب فکر می‌کردم که قدیم‌ها هرچی فحش داشتیم، الآن یا تبدیل به شغل شده، یا گرایش! خدا عاقبت مارو به خیر کنه. 🤔
😁4
وقتی می‌خوایید بگید «سراپا گوشم»، می‌گید:
I'm all ears!
یا «همه تن چشم‌ام»:
I'm all eyes!
#english
👍2🔥1
وقتی کسی پروفایلم رو چک می‌کنه... 😔😂
#fun
😁4
Philocode
مقاله‌ای از مارتین فولر دربارۀ Value Objectها: https://martinfowler.com/bliki/ValueObject.html
می‌فرماید که Value Objectها ویژگی‌هایی دارن، از جمله این دو ویژگی:
1. اینکه immutable هستند، قرار نیست تغییرشون بدیم.
2. اینکه یکتا نیستند. بر خلاف entity که برای ذخیره‌سازی و... نیاز داریم identifiable باشه، اینها نیاز نیست که identifiable باشند.
👍2
Philocode
می‌فرماید که Value Objectها ویژگی‌هایی دارن، از جمله این دو ویژگی: 1. اینکه immutable هستند، قرار نیست تغییرشون بدیم. 2. اینکه یکتا نیستند. بر خلاف entity که برای ذخیره‌سازی و... نیاز داریم identifiable باشه، اینها نیاز نیست که identifiable باشند.
یکی از دلایلی که نویسنده برای این آورده که value objectها بايد immutable باشند.

به اتفاق غیر منتظره‌ای که با تغییردادن پراپرتی acc1 (که یک value object ــه) افتاده توجه کنید.
👍3
Philocode
یکی از دلایلی که نویسنده برای این آورده که value objectها بايد immutable باشند. به اتفاق غیر منتظره‌ای که با تغییردادن پراپرتی acc1 (که یک value object ــه) افتاده توجه کنید.
توی Javanoscript می‎شه این‌طوری آبجکت‌هارو clone کرد. اگه به جای این کار (بهش می‌گیم spread) می‌اومدیم obj1 رو به obj2 اساین می‌کردیم، تغییر obj1 روی obj2 هم اعمال می‌شد چون بهش reference داشت.
👍2