اغلب با صاحبان پروژه یا مدیران فنی ای که درخواست کمک برای ارتقاء پروژههای قدیمی دارند، صحبت میکنم. آنها معمولاً به چیزی شبیه "ارتقاء به PHP 8" یا "ارتقاء به Symfony 5.4" نیاز دارند. برای انجام این کار، دو راه وجود دارد.
کدام یک برای شما بهتر است؟ بیایید ابتدا سوال مهمی را بپرسیم.
آیا قصد فروش پروژه را در سال آینده دارید؟
یا میخواهید برای 5 سال آینده بر روی آن کار کنید؟
به بیان دیگر:
آیا میخواهید KPI خود را در یک زمان کوتاهتر ممکن برآورده کنید تا "رئیس خود را خوشحال کنید"،
یا میخواهید کدهای پروژه برای شما کار کنند و در آینده پول خود را صرفهجویی کنید؟
بیایید فرض کنیم هدف ارتقاء از PHP 7.0 به PHP 7.4 است.
۱. ارتقاء سطحی
این نوع ارتقاء مانند بازسازی یک خانه است، نه برای زندگی شخصی شما، بلکه برای فروش آن به دیگران. شما میخواهید ارزش تصور شده خانه را افزایش دهید، اما باید به کیفیت بازسازی نیز اهمیت بدهید.
همین موضوع در کد هم اعمال میشود. شما میخواهید ارزش تصور شده کد را افزایش دهید، اما باید به کیفیت کد نیز اهمیت بدهید.
وقتی به دیگران میگوییم که کد ما از PHP 7.4 استفاده میکند، این عموماً ۲ چیز را نشان میدهد:
در فایل composer.json از این نسخهای به عنوان حداقل استفاده میکنیم:
{
"require": {
"php": ">=7.4"
}
}
در فایل Dockerfile از نسخهی دقیق PHP استفاده میشود:
FROM php:7.4-cli-alpine
این کار به شما اجازه میدهد در آگهیهای استخدامی خود بگویید که پروژهتان از PHP 7.4 استفاده میکند.
اما واقعاً کد چگونه به نظر میآید؟
class ProjectManager
{
private $managerName;
public function __construct($managerName)
{
$this->managerName = $managerName;
}
public function handle($project)
{
if (date('l') == 'Wednesday') {
$this->organizeMeeting($project);
}
}
}
حق با شماست؛ ما شماره نسخهی PHP را در فایل composer.json و Dockerfile تعریف میکنیم.
اما در واقع از هیچ یک از ویژگیهای PHP 7.4 استفادهای نمیکنیم:
تعریف تایپ پارامترها (از PHP 7.0 به بالا)
تعریف تایپ خروجی (از PHP 7.0 به بالا)
تایپ void (از PHP 7.1 به بالا)
تعریف تایپ پراپرتی ها (از PHP 7.4 به بالا)
با این حال، میتوانید به رئیس خود که پیچیدگی این ارتقاء را درک نمیکند، بگویید که شما هماکنون از PHP 7.4 استفاده میکنید. پاداش انجام ارتقاء را دریافت کنید و ایشان را خوشحال کنید. حداقل برای یک یا دو سال، تا اینکه بدهی فنی به شما برگردد.
۲. ارتقاء با ارزش بلندمدت
روش دیگر، مشابه بازسازی یک خانه برای شما و خانوادهتان است که تا حداقل 20 سال بتوانید در آن زندگی کنید.
شما به کارایی خانه اهمیت میدهید:
پنجرههای جدید نویز و تغییرات دما را کنترل میکنند، جلوی نفوذ نویز را میگیرند،
استفاده ارزان از انرژی در زمستان را فراهم میکنند،
آب گرم برای حمام،
و فضای کافی برای وسایل و اجناس محتلف.
مهم نیست که آن را زیبا و درخشان نشان دهید، بلکه مهم این است که به مدت طولانی برای شما کار کند.
این مراحل زمان بیشتری میگیرد و هزینه بیشتری دارد، زیرا شما شایسته یک خانه مناسب هستید. این در ابتدا ممکن است ناخوشایند باشد. زیرا شما باید نقاشیها و مبلمان قدیمی را کنار بگذارید و شبکه فاضلاب و سیمهای برق را بررسی کنید. بعد از ۲ ماه بازسازی، خانه به نظر بدتر از حالتی که شروع کردهاید میآید.
اما در طولانیمدت، شما اطمینان دارید که پایهها به درستی گذاشته شدهاند و نیازی به نگرانی نخواهید داشت.
همین اصول در ارتقاء کدهای قدیمی هم اعمال میشود. شما از قابلیتهای جدید PHP بهطور مستقیم استفاده میکنید:
-final class ProjectManager
+final class ProjectManager
{
private $managerName;
- public function __construct($managerName)
+ public function __construct(string $managerName)
{
$this->managerName = $managerName;
}
- public function handle($project)
+ public function handle(string $project): void
{
- if (date('l') == 'Wednesday') {
+ if (date('l') === 'Wednesday') {
$this->organizeMeeting($project);
}
}
}
این کد نسبت به نمونه بالا بهتر است و فقط از PHP 7.1 استفاده میکند.
این به شما اجازه میدهد که به سرعت نیروی کار جدید را استخدام کنید، امکان افزودن ویژگیهای جدید با کمترین اشتباهات (regression bugs) را فراهم کنید و راحتتر به نگهداری آن بپردازید.
در تیمی که من عضو آن هستم همواره به دنبال ارزش بلندمدت هستیم، زیرا به موفقیت و رشد تیم اهمیت میدهیم، نه سود کوتاهمدتی که باعث سقوط شرکت میشود.
شما کدام رویکرد را ترجیح میدهید؟