ראינו בפעמים הקודמות איך מממשים Fluent Syntax.
באחת הפעמים הראשונות ראינו שבמימוש מסוים של Fluent Syntax אנחנו יוצרים מחלקה לכל ממשק, ולכן יש לנו הרבה מאוד ממשקים $ \impliedby $ יש לנו הרבה מאוד מחלקות $ \impliedby $ יש לנו הרבה מאוד קוד.
כמובן, זה מצב לא רצוי (שכידוע, פחות קוד, זה יותר טוב).
אחת האופציות לפתור את הבעיה היא הבאה:
נניח שיש לנו את הממשקים הבאים:
|
|
במקום לממש מחלקה עבור כל ממשק, נוכל לכתוב מחלקה אחת שמממשת את כל הממשקים!:
|
|
טוב, זה קצת ארוך אבל הרעיון הוא מאוד פשוט! יש שלוש פונקציות שאנחנו מממשים ושאר הפונקציות קוראות לפונקציות הנ"ל.
הפונקציות האלה הן SetDefaultValue, MakePrimaryKey וAddColumn. הן מחזירות לנו Instance מתאים של המחלקה שלנו (את הInstance הנוכחי, אם אנחנו עדיין עובדים על אותה עמודה, או Instance חדש אם עברנו לעבוד על עמודה חדשה)
בנוסף, הן עושות את הפעולה שאנחנו מצפים שהן יעשו.
למה בעצם יש פה שתי מחלקות? זוכרים את הExtension Method הזה?
|
|
הוא מחזיר Instance של IQ1, שזה בסה"כ ממשק המציין פעולה על טבלה (כלומר, הוספת עמודה). מאחר וזה קורה לפני שעוד יש לנו עמודה ביד, זה מרגיש קצת לא נכון לממש את IQ1 כבר בTableOrColumnDefinitionSyntax<T>. למה? כי מה יהיה הפרמטר הגנרי? אפשר לשים בפרמטר הגנרי כל דבר, אבל זה מרגיש לי קצת לא נכון.
בכל מקרה, עכשיו אחרי שיש לנו את המימוש הזה, אפשר לממש בכיף את הExtension Method הזה:
|
|
ולהשתמש בכיף בFluent Syntax שפיתחנו עד כה:
|
|
וזה עובד!
שבוע צף טוב!