design pattern - proxy

moshe1234561

New member
design pattern - proxy

היי, יש לי בעיה של design בנוגע למודול שאני כותב ואשמח לקבל דעות. יש רכיב שיושב בזיכרון והלקוח כותב אליו וקורא ממנו מידע, כאשר אני מספק את הממשק אליו. כעת הרכיב עבר שינוי והוא מתפצל לכמה מקומות בזיכרון (אפשר לומר מעין כמה תת-רכיבים), כך שחלק מהמידע נרשם לתת-רכיב X ומידע אחר לתת רכיב Y. ללקוח השינוי אמור להיות שקוף כך שאין הוא צריך לדעת שכעת הרכיב התפצל לכמה חלקים ומבחינתו הרכיב עדיין אחד רציף. לכן הוספתי מעין אובייקט "מנהל" אשר הוא מתווך בין הלקוח לתת-רכיבים ובכל בקשה של קריאה/כתיבה הוא מחליט לאיזה מהתת-רכיבים מדובר (דהיינו לאיזה חלק בזיכרון לקרוא/לכתוב). האם אפשר לומר שהמודל שייצרתי הוא Proxy? או אולי Bridge או facade? נראה לי שמדובר ב-proxy אולם כאן יש כמה רכיבים עם proxy אחד ולא כמו ב-design הרגיל שמתארים תמיד רכיב אחד ו-proxy אחד. במידה ואכן מדובר ב-proxy - לא ברור לי מידת הנחיצות ב-"subject". ויתרתי עליו כך שהלקוח יכול לגשת ישר ל-proxy. כך אני חוסך מספר קבצים וקוד שלדעתי מיותר. האם זו טעות? בתודה,
 

arnonrgo

New member
Facade

לפי מה שאתה מתאר זה נשמע לי כמו facade - אוביקט אחד "פשוט" שמחביא מאחוריו מערכת מסובכת יותר proxy הוא נציג של אוביקט כאשר יכולים להיות מספר נציגים לאותו אוביקט אתה למשל יכול להוסיף proxy לfacade שלך כדי לאפשר לו גישה מרחוק בכל מקרה השם של הpattern פחות מהותי - מה שחשוב זה שהתכן יהיה מתאים לדרישות :) ארנון
 

ייוניי

New member
אכן Facade

proxy מחביא בתוכו לוגיקה "טכנית" תוך שמירה על הרכיב הקיים וחשיפת ממשק זהה לרכיב הקיים ללקוח. bridge כשמו כן הוא מגשר בין רכיבים קיימים שאינם קשורים על ידי "התאמת" צד אחד של המערכת לצד השני בלי לשנות אותם. במקרה שלך ביצעת שינוי ברכיב קיים והפכת אותו מ"פשוט" ל"מורכב" באופן שאינו משפיע על הלקוח - זהו מימוש של Facade Pattern.
 

מתכNET

New member
זה לא FACADE לפי ההגדרה.

PATTERN=תבנית קצת מאוחר בשביל להחליט איזו תבנית זוהי,כי שם התבנית נגזר גם מן הבעיה היא באה לפתור. אם היית מגדיר את הבעיה יותר טוב(לך ולא לנו) היית יכול לבחור את ה תבנית המתאימה ולא נאבק בשאלה מהי ה תבנית שיצרת. בקשר ל FACADE לפי ההגדרה:"מספק ממשק פשוט לקבוצת ממשקים בתת מערכת ומאפשר להשתמש בתת המערכת בצורה קלה יותר" לפי התיאור שלך לא שינית את הממשק ל תת המערכת(אוסף האוביקטים שלך)?! לא ברור התיאור שלך לגבי התפצלות בזכרון(אתה מנסה להקל עלינו להבין ? :) ) מה זה רכיב רציף או לא רציף? יש לך כמה אובייקטים כמה מחלקות?
 

arnonrgo

New member
זה כן בדיוק Facade

"תת המערכת" זה האוביקטים שפעם היו אוביקט אחד - הממשק נשאר פשוט והמורכבות הוסתרה
 

moshe1234561

New member
הבעיה היא כזאת

הלקוח היה רגיל לרשום מידע לרכיב A. כעת רכיב A התפצל לשני רכיבים A1 ו-A2 כאשר חלק מהמידע נרשם לרכיב A1 וחלק לרכיב A2 אולם הלקוח לא מודע להתפצלות. יצרתי אובייקט שמנהל את כל העסק והלקוח רק אומר לו, כמו מקודם, תרשום מידע לרכיב A. האובייקט שיצרתי הוא זה שמנווט כעת המידע מה ילך ל-A1 ומה ל-A2. מצד אחד זה facade כי אני מסתיר את הסיבוכיות שבפנים אולם מצד שני לאובייקט המנהל יש את אותו ממשק כמו לאלה שהוא מסתיר והוא די דומה ל-proxy.
 

מתכNET

New member
facade אם כך

ולו רק בגלל הכוונה שהייתה לך ביצירת ה אובייקט המנהל.
 
למעלה