در لایو نوروزی امسال ایمان غفوری، یک سوال خوب مطرح شد.

وقتی یک برنامه داریم که در حالت production قرار دارد و قصد داریم فیچر جدیدی اضافه کنیم بهترین راه برای این که بدون ایجاد مشکل این کار را انجام بدهیم چیست؟

اولین راهی که به ذهن می رسد این است که یک شاخه (branch)جدید در گیت پروژه درست کنیم، تغییرات را اعمال کنیم، در نهایت وقتی همه چیز در لوکال هاست درست بود، تغییرات را روی سرور اصلی هم اعمال کنیم.

اما مسئله اصلی این است که کدهای جدیدی که قرار است برای این فیچر بنویسیم را کجا بنویسیم؟ اکثر افراد مثل خودم، تغییرات را روی کدی که قبلا نوشته بودند اعمال می‌کنند. مثلا وقتی با لاراول کار می‌کنیم روی کنترلری که دارد کار اصلی را انجام می دهد تغییرات را اعمال کنیم.
با این روش ممکن است همه چیز در ابتدا درست به نظر برسد. اما حتما تجربه این را داشته‌اید که درست کار کردن نرم افزار روی لوکال هاست همیشه به معنای درست کار کردن روی سرور اصلی نیست. برای من که زیاد پیش آمده وقتی کد را روی سرور push کردم یک چیزی درست کار نکرده.

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

به route و controller قبلی دست نمیزنیم.

یک route و یک controller جدا می سازیم و بعد کدهای فیچر جدید را داخل کنترلر جدید می نویسیم.

//web.php

//main route
Route::get('/',[HomeController::class,'index'])->name('home');

//test route
Route::get('/',[HomeControllerTest::class,'index'])->name('home-test');


class HomeControllerTest extends Controller
{
    public function index(){

        //Write Your New Code Here.
       
        return view('home');
    }
}

بعد از انجام تغییرات و ارسال روی سرور، URL جدید را تست می‌کنیم تا ببینیم فیچر جدید ما چیزی را خراب کرده یانه. آن وقت می توانیم با خیال راحت تغییرات را روی controller و route اصلی هم اعمال کنیم.
شاید با خودتان بگویید ما که از گیت استفاده می‌کنیم اگر مشکلی پیش بیاید پروژه را بر می گردانیم به حالت قبل.
این حرف درست است، اما زمانی که برای خودمان روی لوکال هاست کد می زنیم.
معمولا در پروژه هایی که کمی بزرگتر هستند. یا کاربرهای زیادی دارند و چندین برنامه نویس در حال کار روی بخش‌های مختلف آن هستند، ریسک انجام تغییرات بزرگ روی آن ها هم بالاتر است.
ممکن است شما بتوانید بعد از ایجاد مشکل در برنامه، آن را با دستورات گیت به حالت قبل برگردانید، اما احتمالا به از دست دادن و ناراضی کردن کاربرها منجر خواهد شد.

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