Amirali Yaghoutiمهندس ارشد نرم‌افزار

مطالعه موردی مهندسی

دکمه ناموجودسازی محصولات شرکتی

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

مسئله تجاری

محصول موجودی شرکتی یعنی محصولی که تعداد موجودی‌اش صفر، خالی یا null است ولی وضعیت موجودی‌اش هنوز «موجود» می‌ماند — فرق نمی‌کند مدیریت موجودی برایش روشن باشد یا نه. ادمین ووکامرس چنین فیلتری ندارد، پس پیداکردن این مجموعه دستی بود، و عوض‌کردن صدها محصول با دست هیچ راه برگشتی ندارد. خطر، خودِ ویرایش نبود؛ نبودن راه برگشت بود.

آنچه تحویل دادم

  • a2-company-stock-off-rollback.php، یک ابزار ادمین نسخه‌ی ۱.۳.۰ با صفحه‌ی اختصاصی خودش به‌جای یک اکشن انبوه؛ چنین عملیاتی صفحه‌ای می‌خواهد که قبلش توضیح بدهد قرار است چه کند.
  • پشتیبان، قبل از اینکه دست به هیچ محصولی بخورد؛ و یک بازگردانی که وضعیت قبلی را از همان پشتیبان برمی‌گرداند.
  • پردازش دسته‌ای با وضعیت جاب در یک آپشن، تا اجرایی که از یک درخواست بلندتر شود ادامه پیدا کند و کاتالوگ نیمه‌کاره نماند.
  • تعریف صریح موجودی شرکتی داخل کد، تا مجموعه‌ی هدف قابل ممیزی باشد، نه وابسته به اینکه آن روز چه کسی فیلتر را ساخته.
  • nonce روی هر اکشن؛ این ابزار موجود بودن را در کل کاتالوگ عوض می‌کند.

رویکرد فنی

  • اول پشتیبان، بعد تغییر؛ و بازگردانی یک فیچر درجه‌یک است نه ریستور دستی دیتابیس. در عملیاتی به این وسعت، همان راه برگشت خودِ محصول است.
  • وضعیت جاب در یک آپشن ذخیره می‌شود و کار دسته‌دسته پیش می‌رود. تایم‌اوت PHP این‌طوری به یک اجرای قابل‌ادامه ختم می‌شود، نه به کاتالوگی نیمه‌تغییریافته که معلوم نیست کجا متوقف شده.
  • تعریف موجودی شرکتی یک بار در سورس نوشته شده و هم پیش‌نمایش و هم اجرا از همان می‌خوانند. یعنی دقیقاً همان چیزی عوض می‌شود که به تو نشان داده‌اند.
  • صفحه‌ی اختصاصی ادمین است، نه اکشن انبوه در فهرست محصولات؛ اکشن انبوه فقط یک کلیک اشتباه تا اعمال‌شدن روی انتخاب غلط فاصله دارد.

نتیجه و شواهد

این کار روتین و برگشت‌پذیر شد. عوض‌کردن وضعیت موجودی شرکتی حالا یک اجرا با پیش‌نمایش و بازگردانی است، نه یک بعدازظهر ویرایش دستی که هیچ‌کس حاضر نبود مسئولش باشد.

اهمیت برای کارفرما

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

خلاصه-اجرایی-پروژه

خلاصه اجرایی خوانا

خلاصه_اجرایی {
  پروژه: "Corporate Products Off Button"
  فایل: "mu-plugins/a2-company-stock-off-rollback.php (v1.3.0)"
  مجموعه_هدف: "تعداد موجودی ۰/خالی/null و وضعیت = موجود،
                فارغ از manage_stock"
  ترتیب: "پشتیبان ← تغییر دسته‌ای ← بازگردانی در دسترس"
  وضعیت_جاب: "در یک آپشن ذخیره می‌شود؛ اجرا قابل‌ادامه است"
  سطح: "صفحه‌ی اختصاصی ادمین، نه اکشن انبوه"
  گارد: "nonce روی هر اکشن"
}

ارزش حرفه‌ای این پروژه

بازگردانی دلیل وجود این ابزار است. به‌روزرسانی دسته‌ای را هر کسی می‌نویسد؛ اینکه بشود برش گرداند، تعیین می‌کند تیم زیر فشار سراغش می‌آید یا نه.

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