?design pattern, anyone

?design pattern, anyone

מחפש שם של DP (יש כאן כמה, ככל הנראה) שמתאימים לתרחיש הבא: יש לי Windows Service שתפקידו בעולם לוודא שתהליכים מסויימים ב DB - אכן מתרחשים. במידה שהם לא מתרחשים - הוא שולח הודעה במייל למישהו. נקרא למחלקה שבודקת את ה DB בשם WatchDog ולמחלקה ששולחת את המייל - Alerter. בסיפור הזה זה ממש לא משנה מה קורה ב Alerter, וברור שאפשר להחליף Alerter באחר לפי interface או abstract class משותף (מי אמר strategy?) מה שחשוב לי כאמור זה ה WatchDog: במידה שה WatchDog מוצא שה DB לא עובד כמצופה (הוא צריך להחזיק state כדי לבצע השוואות לעומת תמונת המצב האחרונה) - הוא מוציא alert דרך ה alerter. אבל אם הוא דוגם שוב את ה DB - אין לי צורך שיוציא alert נוסף. למעשה, אם אחרי X פעמים רצופות ה WatchDog קיבל "כשלים" מה DB - אני מעוניין להחליף אותו ב WatchDog אחר. ה WatchDog השני - יוצא מתוך נקודת הנחה שה DB כרגע לא מתפקד כראוי, ולכן לא דוגם את ה DB בתדירות גבוהה כמו הראשון. יתרה מזו - הוא מוציא alert רק פעם בשעה (נניח). מה שאני מחפש זה pattern שיאפשר לי להחליף בין WatchDogs בהתאם לתרחיש המתואר. חשבתי על State, אבל אני לא בטוח שזה הכיוון. בגדול, אני מעוניין להגיע למצב שבו WatchDog אחד לא מכיר את השני, אלא יש איזה controller שמחליט באיזה להשתמש עכשיו. אשמח לשמוע מה דעתכם בעניין. תודה
 

עידו פ

New member
-->

לגבי הנושא של alerter, נראה לי ש-observer (pub/sub) עדיף, למקרה שתרצה יותר מסוג אחד של alerter (נניח מייל, SMS, קובץ לוג ...) לגבי ה-WatchDog אפשר להשתמש ב-state או strategy אע"פ שנראה לי שהראשון יותר מתאים. מה שכן, הייתי משנה קצת את מימוש ה-pattern ע"י כך שה-watch dog לא יקבעו את ה-state הבא, אלא יעלו אירוע ל-controller וה-contoller ינהל את מכונת המצבים שתקבע מה יהיה ה-watch dog הבא שיופעל.
 
תודה, זה בדיוק הכיוון שחשבתי עליו

הרעיון לשנות קצת את state כך שיעביר שליטה ל controller זה מה שחשבתי עליו. פשוט חשבתי שאולי יש משהו "קלאסי" ברמת out of the box. לגבי ה alerter - אפשר לממש את זה בדרכים שונות, נקודת המוצא שלי היא שבקונפיגורציה ניתן יהיה לקבוע לכל WatchDog את ה alerter שהוא ישתמש בו (משהו בסגנון מנגנון ה providers שבדוט נט) ושוב תודה. אשמח לשמוע דעות נוספות אם יש
 

AnnaBananna

New member
לפתח pub/sub, זה ממש ממש לא פשוט

אבל אם בא לך לבדוק מוצר מדף, שמאפשר LOOSE COUPLING, ויכול לעזור לך מאוד, תבדוק את NDDS של www.rti.com
 
למעלה