שאלת Design ../images/Emo132.gif
אני מכריז על הבעיה שלי בעיית Design אולם היא קשורה במידה מסוימת לזה שאני מפתח את המערכת הזו ב C#. הבעיה היא כזו: קיימת איזושהי תשתית של מחלקות שמקומפלת ל Lib. כאשר אני בא לכתוב את המערכת אני יורש מכל מיני מחלקות, מממש כל מיני ממשקים ומקשר הכל ביחד עם ה lib. יש לי מחלקה בשם BaseServiceProvider והיא מממשת את IServiceProvider (יורשת ממנו). מחלקה נוספת בשם BaseClient שיודע וצריך לדבר עם IServiceProvider. אני יוצר מחלקה חדשה DerivedServoceProvider שיורשת מ BaseServiceProvider. בנוסף אני כמובן יוצר DerivedClient שיורש מ BaseClient. ה DerivedClient שלי צריך לדעת לדבר עם ה ServiceProvider שלו וזאת כמובן אך ורק דרך המממשק. מכיוון ש DerivedServoceProvider מרחיב את המחלקה ממנה הוא יורש הממשק הבסיס IServiceProvider אינו מספיק, וה DerivedClient שלי צריך לדעת לדבר עם ממשק אחר. נ.ב. ה Client (בין אם הבסיס ובין אם היורש) מקבל מצביע (או משהו כזה) לServiceProvider, אוחם הוא ניגש אליו רק דרך הממשק. אני מעוניין ליצור תשתית, כך שכל מי שרוצה יוכל ליצור מערכת משלו על בסיס התשתית שלי ואני צריך לאפשר את היכולות שתיארתי לעיל. הנה כמה בעיות שניתקלתי בהן: א. תמיד אפשר ש DerivedClient פשוט יעשה casting מהמצביע אותו הוא מקבל ל DerivedServiceProvider. זה יעבוד טוב אבל לא יהיה נכון מבחינת Design. אני רוצה לשמור על עניין הממשקים. זה חשוב להמשך... ב. אני לא הצלחתי לחשוב על דרך שבה אני יכול ליצור ממשק IDerivedServiceProvider שיורש מIServiceProvider כי אז DerivedSericeProvider יצטרך לרשת גם ממנו וגם BaseServiceProvider שיורש IServiceProvider, ותיווצר פה ירושה מעגלית... אני מקווה שאני מספיק ברור. אם לא תגידו מה לא ברור לכם ואני אבהיר את הנקודה. ומי שהגיע עד לפה אני מודה לו בכל מקרה
אני מכריז על הבעיה שלי בעיית Design אולם היא קשורה במידה מסוימת לזה שאני מפתח את המערכת הזו ב C#. הבעיה היא כזו: קיימת איזושהי תשתית של מחלקות שמקומפלת ל Lib. כאשר אני בא לכתוב את המערכת אני יורש מכל מיני מחלקות, מממש כל מיני ממשקים ומקשר הכל ביחד עם ה lib. יש לי מחלקה בשם BaseServiceProvider והיא מממשת את IServiceProvider (יורשת ממנו). מחלקה נוספת בשם BaseClient שיודע וצריך לדבר עם IServiceProvider. אני יוצר מחלקה חדשה DerivedServoceProvider שיורשת מ BaseServiceProvider. בנוסף אני כמובן יוצר DerivedClient שיורש מ BaseClient. ה DerivedClient שלי צריך לדעת לדבר עם ה ServiceProvider שלו וזאת כמובן אך ורק דרך המממשק. מכיוון ש DerivedServoceProvider מרחיב את המחלקה ממנה הוא יורש הממשק הבסיס IServiceProvider אינו מספיק, וה DerivedClient שלי צריך לדעת לדבר עם ממשק אחר. נ.ב. ה Client (בין אם הבסיס ובין אם היורש) מקבל מצביע (או משהו כזה) לServiceProvider, אוחם הוא ניגש אליו רק דרך הממשק. אני מעוניין ליצור תשתית, כך שכל מי שרוצה יוכל ליצור מערכת משלו על בסיס התשתית שלי ואני צריך לאפשר את היכולות שתיארתי לעיל. הנה כמה בעיות שניתקלתי בהן: א. תמיד אפשר ש DerivedClient פשוט יעשה casting מהמצביע אותו הוא מקבל ל DerivedServiceProvider. זה יעבוד טוב אבל לא יהיה נכון מבחינת Design. אני רוצה לשמור על עניין הממשקים. זה חשוב להמשך... ב. אני לא הצלחתי לחשוב על דרך שבה אני יכול ליצור ממשק IDerivedServiceProvider שיורש מIServiceProvider כי אז DerivedSericeProvider יצטרך לרשת גם ממנו וגם BaseServiceProvider שיורש IServiceProvider, ותיווצר פה ירושה מעגלית... אני מקווה שאני מספיק ברור. אם לא תגידו מה לא ברור לכם ואני אבהיר את הנקודה. ומי שהגיע עד לפה אני מודה לו בכל מקרה