
IllegalDivisionFault, שאינה יורשת מכלום. היא מסומנת כ-DataContract (מתוך System.Runtime.Serialization) ומכילה פרופרטי של הודעה.[FaultContract(typeof(IllegalDivisionFault))]. בעזרת זה הטיפוס נכנס לפרוקסי של הלקוח.throw new FaultException<IllegalDivisionFault>(fault, reason), כאשר ה-reason הוא ההודעה.catch (FaultException<IllegalDivisionFault>) לפני ה-catch של FaultException הרגיל. ההודעה מוצגת מתוך reason.הטקסט המלא של הדקות הראשונות בהרצאה «Typed Faults» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כעת אנחנו הולכים לראות איך לזרוק בצד של השרת משהו שנקרא טייפט פולט או טייפט אקספצ'ן. כלומר אנחנו רוצים לזרוק טיפוס מסוים כך שנוכל בדיוק את הטיפוס הזה לקבל בצד של הלקוח.
כל מה שעשינו, כל ארבעת השיטות שעשינו קודם, דיווייד ביי זירו אקספצ'ן או כל אקספצ'ן אחר, פולט אקספצ'ן בצורה כזאתי או בצורה עם ג'נריק, עם מסג' בלי מסג', כולם נכנסו לאותו catch של fault exception ולא יכלנו בצד של הלקוח להבדיל ביניהם.
אז אנחנו כן רוצים להבדיל ביניהם בצד של הלקוח. אז מה שאנחנו צריכים לעשות זה כמה דברים. דבר ראשון אנחנו צריכים להוסיף קלאס. אנחנו צריכים לבנות קלאס משלנו.
והקלאס הזאת הולכת לתאר בדיוק את החריגה שהולכת להיות. אז בואו נבנה קלאס ונקרא לה illegal division fault.
הקלאס הזאת לא צריכה להרשת משום דבר. נגדיר אותה כפאבליק. ואנחנו רוצים להגדיר בה איזושהי הודעה, היא יכולה להכיל כל משתנה אחר שאנחנו רוצים, נניח אם יש לנו מידע נוסף שאנחנו רוצים להעביר, אז אנחנו פשוט בונים אותה ומחזיקים בה את כל מה שאנחנו רוצים.
כרגע רק נציג בה איזושהי הודעה, סטרינג, מסאג', בסיטור, כאשר יוצרים אובייקט, נלך למסאג' ונכניס לתוכו can't, בואו נכניס הודעה אחרת שנראה אותה, דבר הבא שאנחנו צריכים לעשות זה להגדיר מעל המסג' דאטה ממבר.
בואו נסתכל אם יש לנו את זה, אין לנו, ולכן אנחנו צריכים להוסיף רפרנס של System Runtime Serialization. ועכשיו אמור להיות לנו את זה.
הנה הוא נמצא, ניפטר מכל ה-Namespaces האחרים, ובנינו כרגע את המחלקה שנקראת illegal division fault שמה שהיא מתארת זה סך הכל message שאסור לחלק באפס.
אחרי שבנינו את המחלקה הזאת זה הדבר הראשון שאנחנו צריכים לעשות. דבר השני אנחנו צריכים ללכת לאינטרפייס. באינטרפייס שנמצא פה אנחנו צריכים ללכת לפונקציה שמיועדת לזרוק את החריגה והפונקציה הזאת היא ה-division הנה היא כאן.
מעל הדיוויז'ן אנחנו רואים שהגדרנו Operation Contract. אז בואו נבצע איזושהי הפרדה ביניהם שהיא יותר ברור, ואנחנו צריכים להגדיר מעל הפונקציה הזאתי עוד אטריביוט שנקרא Fault Contract, כאשר הטיפוס נתונים שאנחנו צריכים לתת לו הוא טייפ אוף והטיפוס של המחלקה שאנחנו יצרנו,
Illegal Division Fault. מה בעצם עשינו כאן? אנחנו עכשיו אמרנו ל-Contract I Calculator, שכאשר הוא ילך ללקוח בעזרת הפרוקסי, יגיע ללקוח בעזרת הפרוקסי, אז אנחנו צריכים לומר לו שישנו איזשהו טיפוס נתונים, E-Legal Division Fault, שאנחנו מגדירים אותו כ-Fault Contract.
זאת אומרת שלמרות שהוא לא אינטרפייס, עדיין הוא נחשב כ-Fault Contract, וזה אומר שהמערכת יכולה להבין שהשירות שלנו יכול לזרוק אובייקטים כאלה כאילו שהם חריגות.
אז זה הדבר השני שאנחנו עושים. ברגע שעשינו את האטריביוט הזה, ברגע שכתבנו את האטריביוט fault contract ונתנו פה את הטייפ off של הטיפוס נתונים שאנחנו בנינו, זה אומר שהטיפוס נתונים הזה ייכנס לתוך הפרוקסי וכך יגיע גם ללקוח והלקוח יכיר אותו, מה שלא היה מקודם.
מקודם הלקוח לא הכיר לנו כל מיני טיפוסי נתונים שאנחנו זרקנו. אוקיי, הדבר השלישי שאנחנו עושים, בואו ניפטר מכל הדברים האחרים כי אנחנו לא הולכים לזרוק אותם ואנחנו הולכים עכשיו לזרוק את הטיפוס נתונים הזה שבנינו.
גם כאן אנחנו יכולים להשתמש בשתי שיטות.