Adapter–Design Pattern

1 בינואר 2018

Adapter זה Design Pattern  מאוד פשוט ששיך למשפחת ה Structural Design Patterns, כלומר, אלו תבניות עיצוב שהמטרה שלהם היא לטפל במבנה הפנימי של הקוד שלנו וביחסים בין האובייקטים השונים, וכשמו כן הוא – מתאם.   בעולם האמיתי אנו משתמשים במתאמים כדי להצליח לעבוד עם כלי מסויים במערכת מסוג דומה אבל שונה. למשל, כאשר אנחנו מזמינים מוצר מחו"ל והוא מגיע עם תקע אמריקאי, אנחנו צריכים מתאם לשקע האירופאי שבבתים שלנו.     בקוד הדבר יבוא לידי ביטוי במקרים שבהם יש לי שתי מערכות שצריכות לדבר האחת עם השניה, אלא שלא בהכרח המתודות שלהן והמאפיינים שלהן זהים. דוגמא: נניח שיש...
אין תגובות

CLEAN CODE – כתיבת קוד שגם בני אדם יכולים לקרוא

24 במאי 2016

"תכנות הוא האמנות של להגיד לאדם אחר מה הוא רוצה שהמחשב יעשה" (דונאלד קנות') מתכנת ממוצע מבלה הרבה יותר זמן בקריאת קוד מאשר בכתיבתו. נוטים לשכוח שהקוד שאנחנו כותבים יקרא בעתיד לכל הפחות 10 פעמים. לפעמים מתכנת קורא קוד שהוא עצמו כתב, ולפעמים הוא קורא קוד שאחרים כתבו. אבל כל מתכנת יודע כמה זה מתסכל לקרוא קוד שבו הכוונה לא מספיק ברורה או שהדרך להשגת המטרה לא ברורה. אי בהירות של הקוד מסתירה ברוב הפעמים גם טעויות של תכנון הקוד ופוטנציאל גדול לבאגים עתידיים. מתוך הבנת הנקודות האלה (ועוד כמה) נולדה מתודולוגיה בעולם הפיתוח שנקראת CLEAN...
תגיות: , ,
2 תגובות

Debug Configuration for Windows Service

26 בדצמבר 2015

כשצריך לדבג קוד שמים breakpoint ופשוט מריצים את התוכנית. אם אנחנו רוצים לדבג קוד שרץ ב process אחר (למשל בתוכנית שכבר רצה על המחשב) אנחנו נכנסים לVisualStudio ומקשרים את הקוד שלנו לprocess הרצוי על ידי attach to process ומנסים להגיע לנקודה הרצוי ( קיצור דרך: ctrl + alt + p). אבל יש מצבים שבהם אנחנו רוצים לדבג לא יעזור לנו בגלל שאנחנו רוצים לדבג תוכנית בזמן ההעלאה שלה. הדוגמא הנפוצה לזה היא windows service.   במקרה כזה אנחנו מוסיפים את השורה: 1: Debugger.Launch();   עכשיו, כדי שיהיה נוח ולא נצטרך כל פעם להוסיף קוד ולקמפל ולהחליף...
תגיות: ,
אין תגובות

Proxy – Design Pattern

3 באוגוסט 2015

תבנית העיצוב Proxy הינה תבנית פשוטה ושימושית המוטמעת בכמה מערכות נפוצות כגון WCF ו Entity Framewwork. באופן כללי הרעיון של הProxy הוא לספק מעין 'תחליף' לשירות אמיתי על מנת להתערב בתהליך שלו. למשל – רוצים לפנות לService אבל רוצים לבדוק בכניסה לשירות מה רמת ההרשאות הקיימות למשתמש הספציפי, ולכן חושפים Proxy המממש את אותו Interface כמו הService האמיתי. Proxy יכול לשמש לשיפור ביצועים במערכת קיימת, בלי לגעת בהתנהגות של האובייקט המקורי (ובכך הוא מממש את Open-Closed Principle: פתוח להרחבות אך סגור לשינויים). ניתן להצביע על שלושה שימושים מפורסמים לשימוש בProxy: 1. Remote proxy -...
תגיות: , ,
אין תגובות

Inversion of Control ו Dependency Injection

11 בספטמבר 2014

Inversion of Control (להלן Ioc), היא תבנית עיצוב אשר ניתן להגדירה באופן כללי, כהעברת השליטה על תהליך כלשהו, כגון יצירת אובייקטים, הרצת קטע קוד וכו', מהדרך הנקראת 'רגילה', על ידי תהליך מרכזי כלשהו, אל רכיב קוד אחר אשר יעשה הוא את העבודה. על ידי היפוך שליטה זה נרוויח לעיתים כמה דברים, כפי שתיכף ניראה. את IoC אפשר לממש בכל מיני דרכים בהתאם לתהליך עליו אנחנו עובדים, אך הכלי שבעזרתו מממשים IoC הוא תבנית עיצוב נוספת בשם Dependency Injection. לפעמים נרצה להשתמש ב IoC על ידי אינטרפייסים, כאשר הרעיון באופן כללי אומר שבמקום שתהליך כלשהו יצטרך להכיר את המחלקות...
אין תגובות

צלילה אל תוך LINQ

10 בספטמבר 2014

LINQ היא טכנולוגיה המאפשרת לנו לתשאל נתונים בעזרת קוד C#. הכוונה במילה 'לתשאל' היא לכך שיש יותר מחמישים אופרטורים המאפשרים למיין, לסנן, לאחד וכו' נתונים. למשל אם נרצה לקבל מתוך רשימת עובדים את העובדים שהם מנהלי מחלקות, נעשה זאת מן הסתם בעזרת LINQ. אז איך LINQ עובד? כידוע C# היא שפה סטטית, והטיפוסים (types) צריכים להיות קבועים ומוגדרים. ולכן, אם נרצה למשל ליצור מתודה בשם Where, שתחזיר לנו אובייקט מטיפוס Employee, נצטרך לדאוג לך שמתודת where מכירה את הטיפוס שלנו. באופן מפתיע אנחנו רואים שLINQ תומכת בכל סוגי המשתנים, אפילו אם הרגע הגדרנו אותם. ...
תגובה אחת

Decorator

בפוסט זה אדגים שני שימושים נפוצים בתבנית העיצוב Decorator. Decorator היא תבנית עיצוב די נפוצה ושימושית ביותר. היא מאפשר הוספת פונקציונליות לאובייקט קיים בצורה דינאמית, מבלי לשנות את האובייקט המקורי. אפשרות זו מונעת ירושה מיותרת או פותרת מקרים בהם אין אפשרות לירושה בכלל (Sealed). עוד דבר שניתן לומר על תבנית זו הוא שהיא מתאימה ל Open Closed Principle- עיקרון זה של תכנות מונחה עצמים אומר שClass צריך להיות פתוח להרחבה, אבל סגור לשינויים. כלומר, סביר להניח שהושקעה מחשבה רבה על עיצוב הClass שלנו, ולכן לא נרצה לשנות אותו. אך מצד שני יתכן מצב שמישהו יצטרך באיזשהו...
תגובה אחת

מדריך לשימוש ב Mock ב Unit Tests

9 ביוני 2014

בפוסט הקודם ראינו דוגמה פשוטה לכתיבת יחידת בדיקה, Unit Test. בעולם האמיתי, המצב מסובך הרבה יותר. ולרוב הסיבוך נובע מכך שכדי לבדוק מתודה אחת פשוטה, יש צורך להריץ מערכת שלמה ולהגיע לסיטואציה מאוד מסויימת עם פרמטרים ספציפיים שהגיעו מכל מיני מקומות בתוכנה שלנו. לדוגמה: אני רוצה לבדוק איזושהי מתודה פשוטה שמשתמשת במידע שהגיע מה DB. ב TEST עצמו אין לי DB על מנת לבדוק איתו וגם אם היה לי, אני לא באמת רוצה להריץ אותו עם כל מה שזה אומר, רק בשביל הבדיקה הפשוטה. בשביל מקרים כאלה ישנם FrameWorks המדמים אובייקט מסויים למרות שהאובייקט לא באמת קיים. למעשה, נוצר...
תגיות: , , , ,
תגובה אחת

Unit Tests – מדריך ליחידות בדיקה

6 באפריל 2014

בפוסט זה נדגים שימוש ראשוני ב Unit Test ככלי לכתיבת קוד נקי יותר, עם צמידות נמוכה ובעל פתיחות  גבוהה לשינויים – כמובן שחשוב להזכיר את העובדה שהרבה יותר זול לתקן באג כאשר הוא מתגלה אצל המתכנת מאשר כאשר הוא מתגלה אצל הלקוח... אך לפני הכל נציין ש Unit Test זה רכיב מתוך תורה שלמה הנקראת TDD, Test Driven Development. אני אומר שזו תורה שלמה משתי סיבות: א. מדובר על נושא רחב ומורכב. ב. מדובר על 'דת' של TDD, אשר חסידיה אדוקים מאוד בשלבי העבודה הנכונה ("המצוות") ובצורך המובהק של שימוש אך ורק ב TDD. לא אכנס לנבכי ה TDD, אך נציין כמה יתרונות...
תגיות: ,
2 תגובות

ANTI-PATTERNS

16 בפברואר 2014

Anti-pattern הוא משהו שנראה כרעיון טוב, אבל הופך לחרב פיפיות כאשר זה מיושם. (ג’ים קופלין) לצד ערוגת תבניות העיצוב החשובות והטובות, צומחים להם גם עשבים שוטים הידועים בשמם: Anti-Patters. להלן מצעד עשרת הגדולים (בתרגום חופשי מרחבי הרשת): 1. Fetish (עדיף לא לתרגם...) – משתמש אובססיבי בתבניות עיצוב ללא סיבה אמיתית ובצורה מופרזת. תוכנית Hello World עשויה לכלול – Singelton, Abstract Factory ו Null Object (ליתר ביטחון). 2. אולר שוויצרי – מקרה שבו יש יותר אינטרפייסים מאשר קלאסים. כמו כן כמות האינטרפייסים על כל קלאס יוצרת תחושה חריפה של סחרחורת... ועל זה נאמר: "כל המוסיף – גורע". 3. אפוקליפסה עכשיו (או מחר) – כל עיצוב התוכנה...
3 תגובות