345. Proxies - part 2

בהמשך לפעם שעברה,

הפעם נדבר טיפה יותר על מה היינו רוצים מProxy שאנחנו מממשים:

כאמור – כאשר אני אומר Proxy, אני מתכוון למימוש של ממשק שמקיים שכל המתודות פונות בסופו של דבר למתודה ספציפית.

היינו מצפים שלמתודה הזאת נקבל את המידע הבא:

  • המתודה שהופעלה – אבל אנחנו רוצים יותר מאת השם, אלא את הOverload המתאים שנקרא. כלומר, כנראה את הMethodInfo של המתודה המתאימה שהופעלה.
  • הפרמטרים שאיתם נקראה המתודה – מדובר במבנה המכיל את הפרמטרים שנשלחו למתודה. ניתן לשלוח את זה בתור מיפוי כלשהו, או בתור מערך שאליו ניגש לפי הסדר של הפרמטרים בMethodInfo כדי למצוא פרמטר ספציפי.
  • בנוסף, היינו מצפים לקבל את הפרמטרים הגנריים של המתודה, אם יש כאלה. אותם אנחנו יכולים לקבל גם בתוך הMethodInfo בהנחה שקראו לMakeGenericType.

בנוסף, היינו מצפים ליכולות הבאות:

  • לקבוע את ערך ההחזר של המתודה שהופעלה
  • לשנות את הפרמטרים שהם ref או out
  • לזרוק Exception ביציאה מהפונקציה

בכל מקרה, היינו מצפים שהפונקציה שאליה שאר הפונקציות עושות Proxy תקבל איזה ממשק שמספק פונקציונאליות כזאת.

יש כמה מימושים כאלה, ביניהם:

  • MethodCall שנמצא בRemoting
  • IInvocation שנמצא בOpen Source בשם DynamicProxy של Castle

בפעמים הבאות נמשיך לדבר על Proxyים ובהמשך נראה את השימושים שהבטחתי

המשך יום מיופה כוח טוב.

שתף