تصميم التعويض
في هذا الدرس 4 موضوعات
هذا الدرس مخطط له. يعرض المخطط أدناه الموضوعات التي سيغطيها، ولم يُنشر الدرس الكامل بعد.
نص الدروس والتمارين باللغة الإنجليزية، بينما تبقى واجهة الموقع وعناوين الدروس بالعربية.
في هذا الدرس
write compensations that are safe and meaningful.
الموضوعات المخطط لها
- A compensation is a new business action, not a database rollback (a refund, not a deleted payment).
- It must be idempotent: it may run twice.
- It must tolerate the forward step never having happened (or still being in flight): releasing stock that was never reserved is a no-op.
- Record intent first (a reservation id) so the compensation knows what to undo.
- Late arrivals: a "reserve" message that arrives after "release" must not re-reserve.
تفاصيل المخطط المبدئي
عرض عملي
@Transactional
void release(UUID orderId) {
reservations.findByOrder(orderId).ifPresentOrElse(
r -> { if (r.isActive()) { r.cancel(); stock.add(r.sku(), r.qty()); } },
() -> reservations.recordCancelled(orderId)); // blocks a late reserve
}اختبر فهمك
What should release do if nothing was reserved?
أظهر الإجابة
Nothing harmful; record the cancellation so a late reserve is rejected.
التطبيق
طبّق هذا الدرس بمختبر الوحدة وتمارينها واختبارها.
تعليم الدرس كمكتمل اختياري ويمكنك التراجع عنه في أي وقت. يبقى تقدمك محفوظًا في هذا المتصفح.