DCSIMG
עמוד הבית| חבילות השירות שלנו| חומר חופשי| צור קשר
הצד הפחות יפה של תבניות עיצוב - בלוג היועצים של מיקרוסופט ישראל

בלוג היועצים של מיקרוסופט ישראל

הצד הפחות יפה של תבניות עיצוב

Alik Levin     הערה: אני שמח לארח את שחר בר (ברזניצקי), ארכיטקט מנוסה בתחום High Scalable Applications. שחר משתף את הנסיון שלו עם מימוש לא נכון של תבניות עיצוב. שווה קריאה!

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

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

Pattern mismatch

מתכנתים שזה עתה למדו patterns מתקשים לזהות את הpattern הנכון לבעייה ועלולים, די בקלות, לבחור את הpattern הלא נכון. הדבר עלול לגרור מימושים משונים ומאולצים שלא רק שלא יועילו אלא שיגרמו נזק כתוצאה מקוד לא מובן וחסר היגיון.

Pattern mania

מתכנתים שנחשפו לpatterns לראשונה מתלהבים מאד מהיופי והאלגנטיות שלהם וכתוצאה מכך מנסים להחיל את הpatterns על כל בעייה שנקרית בדרכם, גם אם היה אפשר לפתור אותה בלולאה ושני תנאי if פשוטים. הסיכון הוא באבדן זמן יקר על over architecture וכמובן בקוד בלתי קריא.

Pattern mis-implementation

יישום לא נכון של pattern מורכב עלול במקרה הטוב לא להזיק אך במקרה הרע יוביל לבעיות לוגיות שקשה לאתר.

מכאן עולה הצורך בליווי של מוביל טכנולוגי מנוסה בשלבי הdesign בתקופה בה נחשפים צוותי הפיתוח לטכניקות תכנון/ביצוע מורכבות. הערך המוסף של ליווי כזה הוא החצנת תהליך קבלת ההחלטה לשימוש בpattern זה או אחר (אם בכלל) ע"י הארכיטקט אל מול המפתחים, על מנת שיבינו לא רק את היתרונות אלא גם את הבעיות והסיכונים.

הנושא השני שיש לשים לב אליו הוא הצפי לעתיד המערכת. עבור מערכת בעלת אחוזי תחזוקה נמוכים ביותר או בעלת צפי שינויים עתידי נמוך אין צורך ואין טעם להגיע לפסגת הגנריות והשלמות. לפעמים אפשר לכתוב קוד quick and dirty אם הוא עושה את העבודה ואף אחד לא יגע בו. אם בעתיד יחליטו להרחיב או לשנות את המערכת בצורה משמעותית, אז נשקול לבצע refactoring ולהפוך את הקוד ל"נכון" יותר.  עקב אכילס היחיד של נושא זה הוא הלקוח – חשוב להציג בפני הלקוח את האסטרטגיה הנ"ל לפיתוח המערכת(בין אם הלקוח הוא חיצוני כמו בחברת פרויקטים או פנימי כמו בחברת מוצר) על מנת ליישר קו כדי למנוע אי הבנות עתידיות בנושא הצורך בrefactoring.

לסיכום

לפני שמלמדים patterns כדי לשנן את עקרונות KISS ו-YAGNI

שירותי MCS רלוונטיים

חומר רלוונטי

פורסם: Nov 04 2009, 08:23 AM by alikl | with 5 comment(s)
תגים:,

תוכן התגובה

orenk כתב/ה:

שחר - תודה על הפוסט המצוין!

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

המשפט שאני בדרך כלל משתמש בכדי לתאר את ה- "Pattern Mania" (גנבתי ממישהו חכם):

"He who has a hammer, sees everything as a nail"...

# October 17, 2009 2:48 PM

Tal Ben-Shalom כתב/ה:

ברוך הבא שחר,

מסכים מאוד עם הכל.

רוצה להדגיש - אומנם רוב הפוסט מדבר על הבעיות שנובעות ממתכנתים צעירים/נימהרים וכו', אך חשוב לשים לב לפתיח של הפוסט - המקור לבעייה הוא הארכיטקט/היועץ...

כפי שציינתי בפוסט קודם (blogs.microsoft.co.il/.../412888.aspx), לדעת לעשות את ההבחנה זה אחד מהמאפיינים שמבדילים יועץ טוב מיועץ פחות טוב.

# November 4, 2009 11:39 AM

Izaki כתב/ה:

אחלה פוסט.

בהחלט נקודות ראויות לציון, לדעתי כל נושא הDP ראוי שיבחן בקפידה ע"י ארכיטקט/יועץ בעל ניסיון על מנת למצוא את ההתאמה המיירבית אם בכלל יש כזו.

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

ברוך הבא שחר, ממתין לפוסט הבא :)

# November 4, 2009 10:55 PM

מיכאל רוף כתב/ה:

פוסט מצוין.

ממתין לעוד פסטים של שחר.

# November 8, 2009 5:22 PM

שחר בר (ברזניצקי) כתב/ה:

תודה לכולם על התגובות.

הנקודות שהעליתם נכונות לגמרי - האחריות הסופית על התוצר היא של הארכיטקט ולא נבוא בטענות לש"ג שהשיג ספר של design patterns. תפקידו של הארכיטקט ו/או מנהל הפיתוח לדאוג שיהיה design מסודר מראש לכל מה שדורש Design ומעבר לכך, לדאוג לעקוב אחר אופן המימוש לאורך חיי הפרוייקט.

כמובן שהנושא רלוונטי גם לכל שאר ההחלטות שמתחלקות בקו התפר שבין CTO/ארכיטקט/מנהל פיתוח בנוגע ל: ניהול תצורה, מתודולוגיה, בחירת מוצרים/טכנולוגיות וכד'. המפתחים יכולים להעלות ולהציע שיטות/טכנולוגיות אבל את ההחלטה המושכלת צריכים לקחת האחראים.

# November 9, 2009 12:34 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 8 and 7 and type the answer here:


Enter the numbers above: