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

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

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

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

مسئله تجاری

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

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

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

رویکرد فنی

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

نتیجه و شواهد

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

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

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

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

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

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

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

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

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