Command Pattern
Ctrl+Z. שתי מקשים שכל משתמש לוחץ בלי לחשוב פעמיים. אבל מה קורה מאחורי הקלעים ב-Photoshop כשמבטלים 50 פעולות? כיצד כלי Migration של Database יודע לבצע Rollback של שינויים שנכתבו לפני שבוע? כיצד BullMQ מחכה עם 1,000 עבודות בתור ומנסה מחדש את אלה שנכשלו? כולם משתמשים ב-Command Pattern - לפעמים בלי שהמפתחים ידעו שנתנו לו שם.
Command Pattern הוא Design Pattern שהופך פעולה לאובייקט. במקום לקרוא ישירות לפונקציה, עוטפים את הקריאה, הפרמטרים, וה-Receiver בתוך אובייקט Command. זה מאפשר דברים שאי אפשר לעשות עם Callback רגיל: לשמור פקודות, לבטל אותן, לסדר אותן בתור, לבצע Retry, ולבנות History מלא.
ה-ניואנס הקריטי: הפיכת "פעולה לאובייקט" לא נשמעת דרמטית, אבל זה מה שמאפשר הכל. פונקציה () => orderService.processOrder(orderId) - אי אפשר לשמור אותה ב-Redis, אי אפשר לשלוח אותה ל-Message Queue, אי אפשר ל-Serialize אותה ל-JSON. Command Object { type: 'PROCESS_ORDER', orderId: '...' } - ניתן לשמור, לשלוח, לשחזר, לחזור עליו. ה-Serialization הוא מה שמבדיל Command מ-Callback.