Factory

ASP zone

New member
Factory

אני צריך ליצור מפעל שיישם את הדברים הבאים: 1) לא ידוע כמה אובייקטים הוא צריך ליצור (אני מתכוון לX אובייקטים היורשים ממחלקת הבסיס Base שהמפעל יכול ליצור) 2) כל מה השFactory מקבל כפרמטר הוא סטרינג של שם המחלקה. איך אני מיישם את זה בדיוק?
 

ייוניי

New member
ב NET.

יש לך את System.Type.GetType שמחזיר אובייקט שאתה יכול לקרוא ל o.GetConstructor ואז ל invoke ותקבל בחזרה אובייקט. לגבי שפות אחרות אני לא בטוח
 

ייוניי

New member
פרובלמטי

לא חושב שיש דרך לטעון אובייקט דינמית ב ++C... וטוב שכך
 

ייוניי

New member
אתה צריך טכנולוגיה

שמאפשרת טעינה דינמית. סביר שהטכנולוגיה תהיה platform dependant. הנה שתי דוגמאות עבור Win: 1. COM - אתה יכול לבנות X רכיבי COM שתומכים ממשק מסויים וליצור אותם בתוך ה Factory שלך על פי שם. (יש פונקציות של COM המאפשרות איתור רכיב על פי שם וטעינה שלו לזכרון). 2. DLL - אתה יכול ליצור X רכיבי DLL שמייצאים פונקציה שמקצה אובייקט מסויים שתומך ממשק ידוע. ל DLL-ים תן את השם של המחלקה שכל אחד מהם חושף ואז ב Factory תוכל לטעון את ה DLL המתאים באופן דינמי ולקרוא לפונקציה - וכך תקבל את האובייקט המתאים.
 

ASP zone

New member
אף פעם לא הצלחתי להתעסק איתם

מה יותר טוב לפי דעתך שאני אדע מה לחקור. בכל מקרה אני לא ממש הבנתי את השני.
 

ייוניי

New member
קשה לומר

אין לי הרבה נסיון בעבודה עם COM או DLL-ים ב ++C (אני השתמשתי ב MFC לצערי...). נראה לי שבמקרה שלך הייתי הולך על ה DLL. עכשיו כשאני חושב על זה אולי אפשר אפילו לכתוב DLL אחד שבו כל המחלקות תשבנה וכל מחלקה תחשוף פונקציה סטטית אל מחוץ ל DLL (בעזרת dllexport) שתאתחל מצביע void לאובייקט מתאים (את הקצאת הזיכרון כדאי לעשות ב factory). ואז ב factory תטען את ה DLL, תקרא לפונקציה המתאימה לפי שם המחלקה (GetProcAddress) ובסוף תמיר את המצביע למצביע למחלקת הבסיס. זה רק כוון כללי, כמו שאמרתי אין לי הרבה נסיון בזה, ניסית בפורום "שפות תכנות"? בכל מקרה אני מרגיש חובה להעיר שהשיטה הזו ליצירת אובייקטים היא בד"כ Anti-Pattern ונשאלת השאלה מהי הדרישה שבגללה החלטת לעבוד כך?
 

ASP zone

New member
יש לי מערכת אירועים

שעובדת בלולאה והיא לא אמורה לדעת מה האירוע הבא שאמור להתבצע אלא רק לאחר שהאירוע הנוכחי באמת התבצע.
 

ייוניי

New member
-->

זה עדיין לא נשמע כמו משהו שמחייב טעינת אובייקט לפי שם המחלקה. אם אתה טוען אובייקטים לפי מחלקה אני מניח שיש להם Ctor קבוע ובמקרה הזה אתה צריך לבחון מחדש האם לא ניתן לשנות את העיצוב למחלקה אחת עם מופעים שונים עבור כל ארוע ולא מחלקות שונות. (המופע יכול לקבל פרמטר של קובץ הגדרות שיגרום להתנהגויות שונות). שנית, אתה תמיד יכול לחסוך את הטעינה הדינמית על ידי פונקציית יצירה (factory) שיש בה משפטי ברירה שבוחרים את המחלקה המתאימה לפי שם. אמנם עבור כל מחלקה חדשה תצטרך להוסיף משפט ברירה אבל זה מתקבל על הדעת. יש עוד שיטות שלא דורשות טעינה דינמית. הייתי שומר טעינה דינמית למקרים שבהם המשתמש אמור ליצור לעצמו מחלקות נוספות (משתמש-מתכנת) ולטעון אותן לתוך האפליקציה או משהו כזה...
 

ASP zone

New member
על המשפטי ברירה חשבתי כבר

לא יעבוד כי זה לא מודולארי וזה לא יעיל (למשל אם האירוע נמצא בסוף הרשימה ויש המון). כל אירוע מקבל פרמטרים שונים לגמרי.
 
למעלה