Golden Code – Telegram
Golden Code
737 subscribers
53 photos
248 links
نکات laravel, php و...
Download Telegram
Golden Code
خب بریم سراغ مفهوم Isolation (جداسازی) در ACID ✅️ وقتی یک برنامه با دیتابیس کار میکنه ممکنه چندین Transaction بطور همزمان اجرا بشن. هر transaction مجموعه‌ای از عملیات روی داده‌هاس که باید بصورت یک واحد کامل انجام بشه. مفهومه Isolation اینه که transaction…
مفهوم D (Durability) در ACID

وقتی یک transaction در دیتابیس COMMIT میشه، باید مطمئن باشیم تغییراتش برای همیشه ذخیره شدن و حتی در صورت قطع برق یا crash سیستم از بین نمیرن. این همون Durability (ماندگاری) هستش.

💡یه مثال :
وقتی پول از حساب بانکیت به حسابه دوستت منتقل میشه و پیام "انتقال موفق بود" میگیری، حتی اگه برق دیتاسنتر قطع بشه، دیتابیس تضمین میکنه که تراکنش انجام شده . این همون Durability هستش.


📌 روش‌های اصلی برای تضمین Durability:

شماره ۱. Write-Ahead Logging (WAL)

تغییرات ابتدا در WAL ثبت میشن و بعدش روی داده‌های اصلی اعمال میشن.
تا زمانیکه تغییرات در WAL ثبت نشده باشن، هیچ تضمینی برای ماندگاری داده‌ها وجود نداره.
در صورت crash، تراکنش های commit شده با WAL قابل بازیابی هستنن.


شماره ۲. Redo / Undo Logs

بخش Redo: مکانیزمی برای بازگرداندن تغییرات تراکنش‌های commit شده پس از crash

بخش Undo: مکانیزمی برای rollback تراکنش‌های ناقص یا aborted

📌 رایج در Oracle و SQL Server و بخش مهمی از Crash Recovery هستش.


شماره ۳. fsync / Force-write

بعده هر COMMIT، داده‌ها از حافظه کش و OS به دیسک واقعی منتقل میشن.
این کار امنیت داده‌ها رو بالا میبره، اما سرعت transaction هارو کمی کاهش میده.


شماره ۴. Replication & Backup

تغییرات میتونن روی سرورهای دیگه کپی بشن یا snapshot گرفته بشن.

📌 این روش‌ها به تنهایی Durability رو تضمین نمیکنن و بیشتر برای Disaster Recovery کاربرد دارن.

Trade-off بین سرعت و ماندگاری (Performance vs Durability)

حالت strict: بعده هر transaction، همه تغییرات حتما روی دیسک نوشته میشن. درین حالت Durability بالاست، اما سرعت transaction ها کمتر خواهد بود.

حالت lazy: تغییرات ممکنه کمی دیرتر روی دیسک نوشته بشن. درین حالت سرعت transaction هابالاتره، اما Durability کمی پایینتر خواهد بود.

📌 مثال در دیتابیس‌ها

PostgreSQL – synchronous_commit:

وقتی این تنظیم فعال باشه، بعده هر transaction، تغییرات حتما روی دیسک نوشته میشن تا Durability تضمین بشه. اگه غیرفعال باشه، transaction سریعتر انجام میشه ولی ممکنه تغییرات کمی دیرتر روی دیسک ذخیره بشن.

MySQL – innodb_flush_log_at_trx_commit:

اگه مقدار این پارامتر روی 1 باشه، بعده هر transaction، تغییرات فورا روی دیسک نوشته میشن (Durability بالا، سرعت کمتر). اگه مقدار روی 2 یا 0 باشه، سرعت بالاتره ولی ممکنه در صورت crash، آخرین transaction ها از دست برن.

#ACID #دیتابیس

@GoldenCodeir 🔥
👍91
خیلی مواقع بعده گرفتنه داده از دیتابیس، نیاز داریم سریع و تمیز به اطلاعات دسترسی داشته باشیم.
تابع array_column در PHP دقیقا برای همین ساخته شده!

🔹 چی کار میکنه؟

میتونه از یک آرایه چندبعدی، فقط یک ستون رو جداکنه.

حتی میتونه آرایه رو با کلید دلخواهتون reindex کنه.

این یعنی: دیگه لازم نیست هر بار روی آرایه حلقه بزنی و جستجو کنی، دسترسی مستقیم داری.

📌 یه مثال:
$users = [
['id' => 1, 'name' => 'Ali', 'email' => 'ali@example.com'],
['id' => 2, 'name' => 'Sara', 'email' => 'sara@example.com'],
['id' => 3, 'name' => 'Reza', 'email' => 'reza@example.com'],
];

// Reindex بر اساس id
$indexed = array_column($users, null, 'id');

حالا $indexed[2] مستقیما اطلاعات Sara رو برمیگردونه،
بدون هیچ حلقه یا جستجوی اضافه.


کاربردهاش؟

ساخت lookup table سریع

کدنویسی تمیزتر و کوتاه‌تر

عالی برای caching و join کردن دیتاست‌ها

خلاصه که : با array_column میتونیم از یک آرایه ساده، یک ساختار قوی برای دسترسی مستقیم بسازیم.
یک ترفند کوچیک، اما تاثیره بزرگ در سرعت و خوانایی کد.
#php #اموزش_php #php_tip

@GoldenCodeir

(به منبع و مثالش توجه کنید👇🏾)
https://x.com/wendell_adriel/status/1969010695279989061?t=h88vjyQnlMap9vvVDFxhXQ&s=35
👍11
یکی از قابلیت‌های جذاب کش در لاراول، Cache Tags هست.
با Tag میتونی چند داده کش شده رو زیر یک تگ مشخص گروه‌بندی کنی. اینطوری مدیریت اونا (پاک‌کردن یا بروزرسانی) خیلی راحتتر میشه.


📌 چرا به درد میخوره؟

فرض کن اپلیکیشن چند تیمی (multi-tenant) داری. هر تیم تنظیمات خودشو داره که توی کش ذخیره میکنی.
حالا اگه بخوای همه کش‌های مربوط به یک تیم خاص رو پاک کنی، با Tag خیلی ساده میشه:

// ذخیره داده‌ها با تگ team-1
Cache::tags(['team-1'])->put('settings', ['lang' => 'fa', 'timezone' => 'Asia/Tehran'], 3600);

// ذخیره داده دیگه با همون تگ
Cache::tags(['team-1'])->put('members', ['Ali', 'Sara'], 3600);

// پاک کردن همه کش‌های team-1
Cache::tags(['team-1'])->flush();

⚠️ یه نکته مهم

این Cache Tags فقط روی درایورهای Redis و Memcached پشتیبانی میشن.
روی file، database یا dynamodb کار نمیکنه.


خلاصه که:

با استفاده از Tag میتونی کش‌ های مرتبط رو یکجا مدیریتشون کنی، بدون نیاز به دونستن کلیدهای مختلف.

#Laravel #Laravel_tip #لاراول

@GoldenCodeir 🔥

(به‌منبع و مثالش دقت کنید 👇🏾)
https://x.com/wendell_adriel/status/1971180406717210806?t=l7I87aVOAwuBep_DjhW18A&s=35
👍8👏2
در نسخه‌ی ۱۲ لاراول، یک قابلیت کاربردی اضافه شده:
میتونید ستونهای Eloquent رو بصورت خودکار به رشته HTML امن (HtmlString) cast کنید.

🔹 چرا مهمه؟

وقتی ستونی مثل content یا denoscription شامل HTML باشه، معمولا باید توی Blade با {!! !!} چاپش کنیم. اما حالا لاراول خودش این کار رو مدیریت می‌کنه و مقدار رو به صورت HtmlString برمیگردونه.


📌 یه مثال

use Illuminate\Database\Eloquent\Casts\AsHtmlString;

class Post extends Model
{
protected $casts = [
'content' => AsHtmlString::class,
];
}

حالا براحتی میتونین در Blade بنویسین:

{{ $post->content }}

و خروجی HTML به درستی رندر میشه


نتیجش:
با AsHtmlString::class کدی تمیزتر، امن‌تر و راحت‌تر برای کار با ستون‌های حاوی HTML در لاراول 12 خواهیم داشت.

#Laravel #Laravel_tip #لاراول

@GoldenCodeir 🔥

(به‌منبع و مثالش دقت کنید 👇🏾)
https://x.com/iamgurmandeep/status/1972171914891207129?t=p2MJGutuSORj99oSJ5woww&s=35
👍144
وقتی با Eloquent توی لاراول کار میکنیم، معمولا برای فیلتر کردن رکوردها از where استفاده میکنیم. مثلا:
User::where('email', $email)
->where('password', $password)
->first();

این روش خوبه، اما لاراول یه قابلیت بهتر و کاربردی داره به اسم Dynamic Where
یعنی میتونیم همون کد بالا رو اینطوری بنویسیم:
User::whereEmailAndPassword($email, $password)->first();

چطوری کار میکنه؟

لاراول متود رو از روی اسمش میسازه.

وقتی میگی whereEmailAndPassword، خودش میفهمه باید روی ستون‌های email و password شرط بذاره.

بین فیلدها میتونی از And یا Or استفاده کنی.

مثال‌:
// شرط روی دو ستون
User::whereNameAndAge('Ali', 30)->first();

// شرط OR
User::whereEmailOrUsername($value, $value)->first();

📌 کجا به درد می‌خوره؟

لاگین یا احراز هویت سریع

جستجوهای ساده و کوتاه

کار با کلیدهای ترکیبی (Composite Keys)


خصلاش که:
این Dynamic Where خیلی وقت‌ها باعث میشن کد کوتاه‌تر، خواناتر و باشه.
#Laravel #Laravel_tip #لاراول

@GoldenCodeir 🔥

(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/Akr4mKhan/status/1973387425268507003?t=PqAyceJRXsgErfUOp8_wtQ&s=35
👍16🔥1🥰1
Forwarded from Linuxor ?
ولی اگه از برنامه نویسی نمی تونین پول دربیارین زیاد خودتونو ناراحت نکنین

ذات درست پول در آوردن از برنامه نویسی بیشتر Passive هستش (یعنی کاری نکنین و پول در بیارین) و نسبت به درآمد های Active خیلی دیرتر نتیجه می‌ده ولی نتیجه بده می‌برتتون هوا، درآمد های Passive همه نوع آزادی بهتون می‌ده از آزادی وقت بگیر تا امنیت پولی و آرامش روانی؛ اگه دارین به صورت Passive حتی یک میلیون در ماه هم در می‌آرین ارزشش رو 100 برابر در نظر بگیرید.

فقط حواستون باشه اگه خونه مادرتون زندگی می‌کنید مادرتون این قضیه رو نفهمه، چون مجبورتون می‌کنه برید یه جا یه کار محکم پیدا کنید و باید بهش اثبات کنید که دارید کار می‌کنید و ریموت هم قبول نیست 6 صبح باید بری بیرون خودش هم واست صبحونه درست می‌کنه

@Linuxor
👍21😁43
در بسیاری از پروژه‌ها وقتی داخل یک database transaction هستیم، نیاز داریم بعد از ذخیره‌ی موفق دیتاها یک Event اجرا کنیم (مثل ارسال ایمیل، ثبت لاگ یا بروزرسانی سرویس خارجی).

اما اگه Event قبل از commit اجرا بشه و transaction به هر دلیلی rollback بشه، یک ناسازگاری بزرگ به وجود میاد:

کاربر ایمیل "ثبت موفق" دریافت میکنه، در حالیکه دیتایی ذخیره نشده.

سرویس خارجی بروزرسانی میشه، در حالی‌که دیتابیس شما تغییر نکرده.

🔴 این یعنی Event شما از وضعیت واقعی دیتابیس عقب میمونه.

📌 راه‌حل لاراول براش:

لاراول برای این سناریو یک راه‌حل خیلی تمیز ارائه داده:
کافیه Event شما این اینترفیس رو پیاده‌سازی کنه:

use Illuminate\Contracts\Events\ShouldDispatchAfterCommit;

class OrderCreated implements ShouldDispatchAfterCommit
{
public $order;

public function __construct($order)
{
$this->order = $order;
}
}

وقتی این Event رو dispatch کنید:

event(new OrderCreated($order));

لاراول تضمین میکنه که اجرای Event فقط بعده موفقیت کامل transaction و commit نهایی اتفاق بیفته.

#Laravel #Laravel_tip #لاراول

@GoldenCodeir 🔥

(به‌منبع و مثالش دقت کنید 👇🏾)
https://x.com/wendell_adriel/status/1974077531943838164?t=ZlSaB6_aM-qXwNDa_ttadw&s=35
👍112
این هلپرفانکشن tap() یکی از اون ویژگی‌های جالبه لاراوله که باعث میشه کدها هم تمیزتر بشن، هم خواناتر.

گاهی لازمه روی یه شی عملی انجام بدی (مثلن تغییر، ذخیره یا لاگ گرفتن)
اما در نهایت بخوای خود اون شی رو برگردونی و نه نتیجه‌ی عملیات.
اینجاست که tap() کاربرد داره.

📌 مثال:
$user = tap(new User, function ($user) {
$user->name = 'Ali';
$user->email = 'ali@example.com';
$user->save();
});

در اینجا:

داخل tap() با $user هر کاری خواستیم کردیم؛

ولی خروجی، همون $user هست — نه نتیجه‌ی تابع.

کاربرد اصلی وقتی وسط یه chain از متودها بخوای کاری انجام بدی، بدون اینکه زنجیره قطع بشه:

return tap(User::find(1))
->update(['active' => false])
->refresh();

یا حتی داخل Query Builder:

$users = tap(DB::table('users'), function ($query) {
$query->where('active', true);
})->get();

#Laravel #Laravel_tip #لاراول

@GoldenCodeir 🔥

(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/laravelbackpack/status/1974074465010208832?t=neGDBuWocqlJjIOARSUOmg&s=35
👍72
Forwarded from یک برنامه نویس تنبل (Lazy 🌱)
🔶 بوت استرپ نسخه ۶

افزودن کلاس های جدید برای ایحاد رنگ بندی جدید

@TheRaymondDev
8👍1
یک برنامه نویس تنبل
🔶 بوت استرپ نسخه ۶ افزودن کلاس های جدید برای ایحاد رنگ بندی جدید @TheRaymondDev
نگاهی به تغییرات مهم نسخه 6

طبق اعلام تیم Bootstrap، در نسخه‌ی Bootstrap v6 سیستم رنگ و تم به شکل کامل بازطراحی خواهد شد.

هدف؟؟
سادگی بیشتر، هماهنگی بین کامپوننت‌ها و پشتیبانی هوشمند از حالت تیره و روشن.

کلاس‌های سراسری به‌جای کلاس‌های اختصاصی

قبلن برای هر کامپوننت کلاس جدا داشتیم مثل:

.btn-primary یا .alert-primary.

📌 اما در نسخه 6، کلاس‌های رنگی سراسری شدن — مثلن فقط از .theme-primary استفاده میکنید و همه‌ی اجزای داخل اون از همون تم پیروی میکنند.

کد ساده‌تر، طراحی منسجمتر

تطبیق خودکار با حالت تیره/روشن

نسخه جدید از تابع مدرن CSS بنام light-dark() استفاده میکنه،
بنابرین رنگ‌ها به‌صورت خودکار با حالت سیستم (Dark/Light Mode) هماهنگ میشن — بدون نیاز به media query.


رنگ‌ها

رنگ‌های تازه مثل Violet، Amber، Lime، Brown و Pewter اضافه شده‌اند.
همچنین، درجات خیلی روشن و خیلی تیره (025, 050, 950, 975) برای هر رنگ در دسترسه.

📎 در کل:
نسخه‌ی 6 تمرکز داره روی این موارد:

یکپارچه‌سازی تم‌ها،

کاهش تکرار در کلاس‌ها،

و پشتیبانی هوشمند از حالت تیره.

نتیجش هم طراحی ساده‌تر، مدرن‌تر و حرفه‌ای‌تر برای تمام کامپوننت‌ها.

#bootstrap #بوت_استرپ #فرانت

@GoldenCodeir 🔥
(منبع👇🏾 )
https://x.com/getbootstrap/status/1975652460992835762?t=Iqg0G6PDseMk691A4Gbj5A&s=35
👍9
اصل S در اصول SOLID یعنی Single Responsibility Principle (اصل تک مسئولیتی)

چی میگه؟
یک کلاس باید فقط یک مسئولیت داشته باشه و فقط یک دلیل برای تغییر. یعنی هر کلاس باید یک نقش مشخص در سیستم داشته باشه و همه کارها رو قاطی نکنه.

چرا این مهمترین اصل SOLIDهستش؟
وقتی یک کلاس چند مسئولیت داشته باشه:

پیدا کردن و رفع باگ سخت میشه،

تغییرات کوچیک تو یه قسمت ممکنه باعث خرابی بخش‌های دیگه بشه،

توسعه و نگهداری پروژه با مشکل مواجه میشه و تیم‌ها بیشتر زمانشون رو صرف درست کردن کد میکنن تا اضافه کردن ویژگی‌های جدید.

نتیجش:
با رعایت این اصل، کد تمیزتر، قابل فهم‌تر و قابل تست‌تر میشه.
کلاس‌ها ساده‌تر هستند و وقتی نیاز به تغییر باشه، فقط بخش مرتبط اصلاح میشه بدون اینکه باقی سیستم آسیب ببینه.
#SOLID

@GoldenCodeir 🔥
(منبع👇🏾)
https://www.linkedin.com/posts/ali-mohammadi-5b7375389_solid-activity-7382848511261773824-diAJ?utm_source=share&utm_medium=member_android&rcm=ACoAAF-g0BsBHAA03jv74SJdJwUrgHFqATrvXb8
👍101
بلاخره React از مِتا جدا شد!

بعد بیش از ۱۰ سال، React قراره تحت یه بنیاد مستقل به نام React Foundation اداره بشه ( زیر چتر Linux Foundation )
یعنی از این به بعد تصمیم گیری ها و سرنوشت ری اکت، دیگه فقط دست Meta نیست و جامعه دولوپرها و شرکت‌های دیگه هم تو جهت دهی آینده React نقش دارن!

و این یعنی شفافیت، مشارکت و تنوع بیشتر در توسعه کتابخونه دوست داشتنی ری اکت

بنظرم React داره یه فصل جدید از داستانش رو شروع میکنه…
ری اکت دیگه صرفا پروژه یه شرکت نیست، بلکه نتیجه ی همکاری یه جامعه ی جهانی از دولوپر هاست


@DevTwitter | <Ahmad Ahmad-Nejad/>
👍13🔥2
متود mode() یکی از متودهای کاربردیه کالکشن های لاراول است که پر تکرارترین مقدار داخل یک Collection رو برمیگردونه.

مثال:

$collection = collect([1, 2, 2, 3, 3, 3, 4]);
$mostFrequent = $collection->mode();
// خروجی: [3]

📌 نکته:
خروجی به صورت آرایه هستش چون ممکنه چند مقدار با بیشترین تکرار وجود داشته باشه.


فرض کنین میخواید در سیستم سفارشات، محبوبترین روش ارسال کالا در ۳۰ روز گذشته برای هر تیم رو بصورت خودکار انتخاب کنید. متود mode() بهترین گزینس چون هم مقدار پر تکرار رو بر میگردونه و هم اگه چند روش ارسال تعداد تکرار برابر داشتند، بصورت کامل مدیریت میکنه.

خلاصش که:

متود mode() ساده‌ترین راه برای گرفتن پرکاربردترین یا پر تکرارترین مقدار از داده‌های جمع‌آوری شده هستش.

#Laravel #laravel_tip #لاراول

@GoldenCodeir 🔥

(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/wendell_adriel/status/1977713885433012395?t=ukkZaeMjXG9DkTk7wfrCIA&s=35
👍15
Golden Code
اصل S در اصول SOLID یعنی Single Responsibility Principle (اصل تک مسئولیتی) چی میگه؟ یک کلاس باید فقط یک مسئولیت داشته باشه و فقط یک دلیل برای تغییر. یعنی هر کلاس باید یک نقش مشخص در سیستم داشته باشه و همه کارها رو قاطی نکنه. چرا این مهمترین اصل SOLIDهستش؟…
اصل open closed در اصول SOLID چی میگه؟

این اصل میگه که:

کلاس‌ها، ماژول‌ها یا توابع باید برای توسعه باز باشند ولی برای تغییر بسته باشند.

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

📌 اهمیت open closed

کاهش خطا و باگ‌ها:
با اجتناب از تغییر کدهای تست‌شده، احتمال ورود خطاهای جدید کمتر میشه.

افزایش انعطاف‌پذیری:
افزودن قابلیت‌های جدید بدون دستکاری کدهای قبلی امکان‌پذیره .

نگهداری آسون تر:
توسعه‌دهندگان اینطوری میتونن بدون نگرانی از تاثیر تغییرات، روی توسعه کار کنند.

بهبود کیفیت:
کدهای قابل توسعه، سرمایه بلندمدت تیم‌های نرم‌افزاری هستند.

📌 خلاصش که:

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

#SOLID #OpenClosedPrinciple

(منبع👇🏾)
https://www.linkedin.com/posts/ali-mohammadi-5b7375389_solid-openclosedprinciple-share-7384671951681691649-2OGj?utm_source=share&utm_medium=member_android&rcm=ACoAAF-g0BsBHAA03jv74SJdJwUrgHFqATrvXb8
👍7
لاراول از قابلیت Task Scheduling بسیار قدرتمندی برخورداره. دو متود خیلی کاربردی درین زمینه وجود داره:

🔹 pingOnSuccess()
🔹 pingOnFailure()

این متودها به شما اجازه میدن بعد از اجرای یک تسک، بصورت خودکار درخواست HTTP به یک وب‌هوک یا API بفرستین.

📌 مثلا:

فرض کنین در پروژتون یک تسک بکاپ‌گیری خودکار دارین که هر شب اجرا میشه.
بعد از اتمام موفقیت آمیزه بکاپ، میخواید یک سرویس مانیتورینگ رو مطلع کنید که همه‌ چی اوکی بوده و میتونه لاگ‌ها رو آرشیو کنه. برای این کار با pingOnSuccess() میتونید به راحتی یک درخواست HTTP به سرویس مانیتورینگ بفرستید.

از طرفی اگه عملیات بکاپ fail شد، با pingOnFailure() میتونین سریع یک هشدار به تیمتون یا سرویس اعلان بفرستید تا موضوع بررسی بشه.

$schedule->command('backup:run')
->dailyAt('02:00')
->pingOnSuccess('https://your-monitoring-service.com/api/backup-success')
->pingOnFailure('https://your-alert-service.com/api/backup-failed');

چرا مهمه؟
این قابلیت کمک میکنه workflow بین سرویس‌ها به شکل اتوماتیک و مطمئن کنترل بشه و در صورت بروز خطا سریع واکنش داده بشه.

#Laravel #Laravel_tip #لاراول

@GoldenCodeir 🔥

(به منبع و مثالش دقت کنید👇🏾)
https://x.com/wendell_adriel/status/1979151691023810615?t=om0EwaeLVurWj05Rmxl5Tg&s=19
👍13🔥3
به گفته ی Taylor Otwell

نسخه‌ای جدید از لاراول منتشر شد که دو ویژگی قدرتمند و کاربردی بهش اضافه شده:

📌 شماره ۱ : Cache Failover

یکی از چالش‌های رایج در پروژه‌های بزرگ، خرابی کش (مثل Redis) است. در گذشته اگه کش از کار میفتاد، ممکن بود پروژه با خطا مواجه بشه و از کار بیفته.

حالا لاراول از cache failover پشتیبانی میکنه:
اگه کش اصلی در دسترس نباشه لاراول بصورت خودکار سراغ کش پشتیبان (مثل فایل یا دیتابیس) میره و از بروز خطا جلوگیری میکنه.


📌 شماره ۲: Deferred Queue

قابلیت دوم، نوع جدیدی از صف هست با نام deferred.
این صف‌ها به شما اجازه میدن که اجرای job هارو تا زمانی خاص به تاخیر بندازید ، نه صرفا با delay زمانی، بلکه با منطق‌ های انعطاف‌ پذیرتر.

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

#Laravel #PHP #Laravel_tip #لاراول

@GoldenCodeir 🔥

داکیومنته لاراول:
https://laravel.com/docs/12.x/cache#cache-failover
(منبع👇🏾)
https://x.com/taylorotwell/status/1980664560492376378?t=AW_V157KGhHWfyPOqCy1Lg&s=35
👍114
Golden Code
اصل open closed در اصول SOLID چی میگه؟ این اصل میگه که: کلاس‌ها، ماژول‌ها یا توابع باید برای توسعه باز باشند ولی برای تغییر بسته باشند. به عبارت دیگه، سیستم نرم‌افزاری باید به گونه‌ای طراحی بشه که قابلیت افزودن ویژگی‌های جدید بدون نیاز به تغییر در کدهای…
اصلLSP یکی از اصول مهم SOLID هستش که میگه:
"Objects of a subclass should be replaceable with objects of their superclass without affecting the correctness of the program."

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

چرا LSP مهمه ؟

1.تاثیر در پایداری کد

2. باعثه کاهش باگ‌های پروژه میشه

3. انعطاف‌پذیری: با رعایت LSP میتونید به راحتی کلاس‌های فرزند رو جایگزین کلاس‌های والد کنید بدون اینکه نیاز به تغییرات زیادی در کد داشته باشین.

📌 نقض LSP و مشکلاتش

زمانیکه یک کلاس فرزند رفتار متفاوتی نسبت به کلاس والدش ارائه بده LSP نقض میشه. این خب میتونه باعث یک خطا بشه.

مثلا اگه یک کلاس فرزند ویژگی‌هایی رو به ارث ببره که براش مناسب نیست (مثل پرواز برای یک پنگوئن)، وقتی اون کلاس فرزند جایگزین کلاس والد بشه، ممکنه برنامه با خطا مواجه بشه.

✅️ راه‌حل: یه طراحیه صحیح

برای جلوگیری از نقض LSP باید کلاس‌ها به‌گونه‌ای طراحی بشن که تنها ویژگی‌های مرتبط رو ارث ببرند. مثلا، میشه رفتارهایی که به پرواز مربوط هستن رو در یک کلاس جداگانه قرار داد و رفتارهایی که به ویژگی‌های دیگر مربوط میشن رو در کلاس‌های دیگر مدیریت کرد.

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

خلاصش که:

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

#SOLID #LSP

@GoldenCodeir 🔥
(منبع👇🏾)
https://www.linkedin.com/posts/ali-mohammadi-5b7375389_solid-lsp-liskovabrsubstitution-activity-7387569961008943104-XDW2?utm_source=share&utm_medium=member_android&rcm=ACoAAF-g0BsBHAA03jv74SJdJwUrgHFqATrvXb8
👍7
ویژگیه جدید defer در لاراول v12.34.0

در لاراول نسخه 12.34.0، متود جدیدی به نام defer در کلاس HTTP Client Batch معرفی شده که میتونه تاثیر زیادی در بهبود سرعته اپلیکیشن داشته باشه.

📌 چیکار میکنه؟

با استفاده از defer میتونین درخواست‌های HTTP به api های خارجی یا سرویس های انلاین رو پس از ارسال پاسخ به کاربر ارسال کنین. یعنی این که زمان انتظار برای این درخواست‌ها روی تجربه کاربری تاثیر نمیذاره و سرعت پاسخ‌دهی به کاربر بیشتر میشه.

📌 چرا باید استفاده کنیم؟

افزایش سرعت پاسخ‌دهی به کاربر:
با استفاده از defer، درخواست های HTTP به سرویس‌های خارجی بعده ارسال پاسخ به کاربر آغاز میشن.
این یعنی زمان انتظار برای کاربر به حداقل میرسه و عملیاته زمانبر در بکگراند انجام میشه، بدون اینکه سرعت بارگذاری صفحات تحت تاثیر قرار بگیره.

عملیات‌های زمانبر بدون تاثیر بر تجربه کاربری:
مثل ارسال ایمیل‌ها یا بروزرسانی موجودی انبار.

بهینه‌سازی منابع سرور:
منابع سرور به شکل بهتری مدیریت میشن.


نمونه کدش:

use Illuminate\Support\Facades\Http;

Http::batch(function ($batch) {
$batch->defer(Http::post('https://example.com/api/notify', [...]));
$batch->defer(Http::post('https://example.com/api/update-stock', [...]));
});

خلاصه که اگه دنبال بهبود سرعت و عملکرد اپلیکیشنید ، این ویژگی میتونه خیلی مفید باشه!
#Laravel #Laravel_tip #لاراول

@GoldenCodeir 🔥

(به‌منبع و مثالش دقت کنید 👇🏾)
https://x.com/magadum_aniket/status/1981755582836019433?t=8V5fsh9-RDxwLVoMlX4dVA&s=35
👍52🔥1
در لاراول اگه بخوایم بصورت همزمان چندین Job رو در queue با اولویت‌های مختلف ارسال کنیم، از کدوم ویژگی استفاده میشه؟
Anonymous Quiz
41%
onQueue()
11%
delay()
43%
chain()
5%
onConnection()
👍5🤷‍♂2