• #C,  Design Patterns,  ארכיטקטורת תוכנה | Software Architecture

    הכסף ירד מחשבון אחד. מה עם החשבון השני? להכיר את Unit of Work

    העברה כספית בין שני חשבונות נראית, לפחות במבט ראשון, כמו פעולה פשוטה: מפחיתים סכום מחשבון אחד ומוסיפים אותו לחשבון אחר. מבחינת הקוד, אפשר להתחיל כך: אבל שינוי של אובייקט בזיכרון אינו שינוי של הרשומה במסד הנתונים. צריך גם לשמור. אז נוסיף שמירה אחרי כל פעולה: לצורך הדוגמה, נניח שכל קריאה ל־SaveAsync שומרת ומאשרת את השינוי באופן עצמאי, ואין טרנזקציה משותפת שעוטפת את שתיהן. ההפחתה מהחשבון הראשון נשמרה. בזמן השמירה של החשבון השני התרחשה תקלה. מה המצב עכשיו? מבחינת כל פעולת שמירה בנפרד, ההתנהגות ברורה: הראשונה הצליחה והשנייה נכשלה. מבחינת הפעולה העסקית, קיבלנו חצי העברה. וזו בדיוק הבעיה. חילקנו את הקוד לפי האובייקטים שאנחנו שומרים, אבל הפעולה העסקית אינה שייכת לחשבון…