جلوگیری از بی‌اعتباری هشدارهای Deprecation

وقتی PHPStan یک متد را به عنوان deprecated علامت‌گذاری می‌کند، معمولاً به دنبال جایگزین می‌گردید. اما اگر جایگزینی وجود نداشته باشد چه؟

Shopware از تگ @deprecated برای اعلام تغییرات برنامه‌ریزی‌شده استفاده می‌کرد—مانند اضافه کردن یک پارامتر اختیاری جدید. ابزارهای تحلیل استاتیک (Static-analysis) با این تگ‌ها مانند منسوخ‌شدگی‌های واقعی برخورد می‌کردند و برای هر فراخوانی شکایت می‌کردند. این حجم از هشدارهای بی‌مورد بالا رفت، توسعه‌دهندگان شروع به نادیده گرفتن هشدارها کردند و این هشدارها ارزش خود را از دست دادند. این همان وضعیت کلاسیک «گرگ درآوردن» (Crying wolf) است که در آن هشدارها دیگر جدی گرفته نمی‌شوند.

در Shopware 6.7.14.0 ما این سیگنال‌ها را از هم تفکیک کردیم.

  • @deprecated – این تگ را فقط برای APIهایی رزرو کنید که حذف یا جایگزین خواهند شد. شما باید کد خود را مهاجرت (migrate) دهید.
  • BC-change attributes – از این‌ها برای تغییرات برنامه‌ریزی‌شده‌ای استفاده کنید که API را زنده نگه می‌دارند، مانند پارامترهای اختیاری جدید یا انواع بازگشتی (return types) تغییریافته.

این ویژگی‌های (attributes) جدید در Shopware\Core\Framework\Deprecation\BCChange قرار دارند. آن‌ها دقیقاً به شما می‌گویند چه چیزی تغییر خواهد کرد و چه بخش‌هایی تحت تأثیر قرار می‌گیرند.

ما آن‌ها را به دو گروه تقسیم کردیم:

  • CallSiteCompatibilityChange – بر کدهایی که یک متد را فراخوانی می‌کنند تأثیر می‌گذارد.
  • ExtenderCompatibilityChange – بر کلاس‌هایی که یک متد را extend یا override می‌کنند تأثیر می‌گذارد.

اکنون می‌توانید افزونه خود را برای Shopware 6.8، پیش از انتشار نسخه اصلی بعدی، آماده کنید.

مثال: یک متد قرار است یک پارامتر اختیاری جدید دریافت کند. همین امروز آن پارامتر را به overrideهای خود اضافه کنید؛ کد هم در نسخه‌های فعلی و هم در نسخه‌های آینده اجرا خواهد شد.

این تغییر باعث بازگشت اعتماد به هشدارهای deprecation می‌شود.

سه مرحله برای توسعه‌دهندگان

  1. با @deprecated به عنوان یک اصلاح اجباری برخورد کنید؛ این API حذف خواهد شد.
  2. الگوهای نادیده گرفتن (ignore) گسترده را که ممکن است مشکلات واقعی را پنهان کنند، کنار بگذارید.
  3. منتظر BC-change attributes باشید و به جای یک مهاجرت عظیم در آینده، اکنون به‌روزرسانی‌های کوچک و ایمن را اعمال کنید.

Source: https://dev.to/shopware/when-deprecated-cries-wolf-making-shopwares-next-major-upgrades-easier-983