עבור לתוכן

MVP כיצד הייתן עושים זאת בצורה נכונה? כולל דוגמא

Featured Replies

פורסם

אני רוצה לקחת דוגמא ופשוטה ולפתח אותה. אשמח אם מישהו יתן הצעות מניסינו. לגבי עיצוב התוכנית בצורה נכונה.

יש מסך ראשי - MainForm שמחזיק רשימה של נקודות. בנוסף יש בו כפתורים של הופוסף נקודה, ערוך נקודה וכו..

כשלוחצים על כפתור "הוסף נקודה" נפתח מסך חדש PointForm -שמציג שלוש שדות: שם הנקודה, X ו Y. וכפתור אישור וביטול.

עכשיו ב MVP...

יהיה MainForm (מסך ראשי ) והוא יממש את IMainView.

PointForm שיממש את IPointView.

בומסף שתי Presenter ים. MainPresenter ו PointPresenter.

עכשיו לתהיות:

1. כל Form במקרה שלי השניים שמוצגים לעיל יאתחלו את את ה Presenterים ויחזיקו מצביע. למשל

בבנאי של MainForm יתבצע


m_mainPresenter = new MainPresenter(this)

האם הייתן עושים זאת בצורה שונה?

2. כלוחצים על כפתור "הוסף נקודה" צריך לפתוח את ה PointForm. איך הייתם עושים זאת?

א. האם ב event של לחיצה על כפתור "הוסף נקודה" שזה אומר במחלקת mainForm הייתם כותבים:


(new PointForm()).ShowDialog()

בעיה שאני רואה פה ששבעוד פונקציות אני אצטרך לכתוב את השורה הזו כמו למשל ב":ערוך נקודה" שמראה את אותו המסך רק עם ערכים לשינוי.

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

(new PointForm()).ShowDialog()

ולשנות את השורה, וזה לא נעים.

ב. בכלל הייתם מפעילים ב event שב MainForm פונקציה למשל m_mainPresenter.AddPoint()

וה mainPresener יחזיק מצביע ל PointView ויבצע


m_pointPresenter.Show()

ומכאן והלאה כמו ב א' מי שאחראי להוספת הנקודה הוא ה pointPresenter

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

3. לוחצים על כפתור "הוסף נקודה" החלון עולה וכאשר מישהו מכניס ערכים חדשים: כמו שם נקודה וערכים X ו Y. ולוחץ על אישור ה pointForm יפנה ל PointPrsenter ויוסיף את הנקודה ל Collection של נקודות כמובן שאני רוצה להוסיף את שם הנקודה לתצוגת כל רשימת הנקודות המופיע ב mainForm .

עכשיו בעיה נוספת אותו מאגר של נקודות צריך גם ה MainPresenter להכיר כדי להציג את רישמת כל הנקודות! אז איך הייתם רושמים בצורה נכונה כך שאותו מאגר הנקודות יוכר גם ב MainPresenter וגם PointPresenter.

שוב זה מקרה קטן שיכול להסץבך כשיש הרבה חלונות.

בכל התהיות אשמח אם מישהו יתן את דעתו איך הוא היה עושה זאת ומה השיקולים שלו.

פורסם
  • מחבר

מישהו?

  • 2 שבועות מאוחר יותר...
פורסם
  • מחבר

?

פורסם

2. אם השורה חוזרת על עצמה בהרבה מקומות, אתה תמיד יכול להחליף אותה בקריאה לפונקציה שמכילה את שורת הקוד הזו. לא בטוח שהייתי עושה את זה בעצמי במקרה הזה, אבל זה פתרון אפשרי.

3. למה ה-point form צריך להכיר את שאר הנקודות? הוא form של נקודה אחת. זה קצת מחוץ ל-Scope שלו. ה-main form שלך צריך לקבל ממנו חזרה אובייקט נקודה ולהכניס אותו ל-collection (במידה ולא קיים כבר)

פורסם
  • מחבר

פשוט התבלבלתי התכוונתי ל MainPresener ו PointPresenter (ערכתי את ההודעה) שהם אמורים להכיר את ה collection של הנקודות.

PointPresenter צריך להכיר את ה Collection וזאת שכאשר ילחצו על אישור ב PointFrom הוא יפנה ל PointPresenter שיוסיף את הנקודה ל collection

פורסם
  • מחבר

?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים