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

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

کیف پول طلا و دفترکل جواهر

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

مسئله تجاری

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

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

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

رویکرد فنی

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

نتیجه و شواهد

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

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

در خرده‌فروشی جواهر، گفت‌وگوهای موجودی پرارزش و کم‌تکرارند، یعنی دقیقاً همان‌هایی که نمی‌توانی از دستشان بدهی. یک دفتر قابل ممیزی همان چیزی است که موقعیت فروشگاه را قابل دفاع می‌کند.

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

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

خلاصه_اجرایی {
  پروژه: "Gold + Jewellery Wallet Ledger"
  مدل: "ورودی‌های فقط-افزودنی؛ موجودی مشتق، نه ذخیره‌شده"
  دسته‌ها: "بیعانه / اعتبار معاوضه / تبلیغاتی،
            نوع‌دار و قابل کوئری، نه متن آزاد"
  اصلاح‌ها: "یک ورودی جدید، هرگز ویرایش یا حذف"
  حساب: "اعداد صحیح؛ بدون اعشار شناور روی پول"
  ممیزی: "خود ورودی‌ها سابقه‌اند؛ بدون لاگ جدا"
  جواب_می‌دهد: "این موجودی چطور به اینجا رسید، ورودی به ورودی"
}

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

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

مدل‌سازی صریح دسته‌های ارزش از ابتدا گران‌تر است و جلوی آن دسته باگی را می‌گیرد که در آن بیعانه‌ی یک قلم بی‌صدا روی قلم دیگری قابل خرج می‌شود.