Marker-Interface c# Attribute

27 בDecember 2012

יצא לנו פעם לבדוק "האם האובייקט הוא IDisposable, Serializable, IEnumerable, DataContract " ?? מה משותף לכולם? ובכן התנהגות או יכולת מסויימת שאני נזקק לה במסגרת התכנית שלי. וזאת הגדרת תבנית העיצוב שנקראת Marker Interface אולם, יש כאן ערבוב של Interface ושל Attribute.. אז?? ובכן זה אותו דבר אם תשאלו את Marker Interface 2 הטכניקות הן הצורות המקובלות להשתמש בתבנית. ומה זה אומר? לספק התנהגות/יכולת משותפת לאובייקטים כדי שמי ששולח/יוצר אותם ומי שמקבל/משתמש בהם יהיה רגוע שיש להם את אותה יכולת/התנהגות. על Interface אין מה להרחיב, על Attribute אולי קצת יותר, כי אחוזי השימוש בו נמוכים משמעותית. קצת רקע: MetaData זה מושג מעולם התוכנה וזה אומר "מידע על המידע" כן, נשמע נורא אני מסכים.. ובכל...
2 תגובות

Events – the non Delegate event

26 בDecember 2012

  דיברתי על events, על Observer על Delegates, ישנה עוד פינה קטנה שהטרידה אותי. מה היה לפני הEvents של דוט נט? לפני שEvent השתמש בdelegate.. טוב אז ברור שלא היתה בעיה כי דלגייט היה  שם מגרסה 1.1 עד כמה שידוע לי, אבל what if  ?? נניח שאין לנו דלגייט מה שאומר אין לי אפשרות לספק לאובייקט א גישה לפונקציה של אובייקט ב דרך שליחת רפרנס לפונקציה.. נסביר את הבעיה: כשאני מגדיר את אובייקט א אין לי מושג מי וכמה אובייקטים בעתיד ירצו להירשם לאירועים שלו, לכן צריך ממשק חיצוני שיתמוך בשירות הזה.. התשובה היא פשוטה באמצעות התנהגות משותפת לכל מי שרוצה להירשם לאירוע, זאת אגב ההגדרה של תבנית ה...
תגיות: , ,
2 תגובות

Delegate – Interface Pattern

24 בDecember 2012

דלגייט הוא אחד מהכלים המשמעותיים ביותר בשפת C# לדלגייט אין סוף יכולות ושימושים, והוא מהווה מוקש רציני להרבה סטודנטים שמנסים להבין מה ואיך זה עובד. אולי חלק מזה הוא שדלגייט עבר כמה גלגולים וצורות כתיבה וקצת הפך למפלצת, פחות מסתכלים על הגרסה הבסיסית שלו כמו שאנסה לפשט בפוסט הזה. דווקא כשמדברים על הקשר לDesign Patterns  ישנו בלבול רב, והוא כנראה יגבר עם הזמן.. אנשים נותנים פירושים שונים לתבניות כאלה ואחרות ומבלבלים בין טכניקות של שפת התכנות שמספקות תשתית בשפה ואכן מבוססות תבנית כלשהיא, לבין הגדרת התבנית עם השם המקורי. זה  אמנם לא שם נפוץ כמוsingelTon , Command , Observer  וכו' אבל עדיין קיים כהגדרה בספרות מקצועית. למעשה חיפוש בגוגל על interface Pattern  ייתן לנו יותר מידע על...
2 תגובות

המדריך לטרמפיסט בגלקסיה של הגיקים

בשפה הרשמית קוראים לזה Visual Studio...  ואנו רוצים לחסוך זמן, לכתוב מהר יותר וטוב יותר. ראיתם פעם את המתכנתים האלה שכל פעולה עושים דרך המקלדת? יצאו לכם העיניים?  לא עוד! במסגרת מהפכת "קיצורים לכולם" אגיש רשימה של  30 ומשהו הקיצורים הטובים ביותר.. הוספה ופתיחה: Ctrl+Shift+N: הוספת פרויקט חדש. במסך הפתיחה או מפרויקט קיים. Ctrl+Shift+A: הוספת אייטם לפרויקט (קלאס, אינטרפייס, userControl וכו'). Ctrl+Shift+C: הוספת קלאס, נפרד מהוספת סתם אייטם כי הוא נפוץ יותר. Ctrl+Shift+O: פתיחת פרויקט לדפדוף (נניח הוספת DLL  מפרויקט קיים).   הערות וסידור שורות: Ctrl+K+C: סימון השורה בהערה. Ctrl+K+U: הורדת ההערה מהשורה. Ctrl+E+D: מיישר את השורות העקומות שלכם, (שזה מבחינתי בחירת העורך כקיצור הטוב ביותר). Ctrl+M: מכווץ/מרחיב את השורות – איפה שיש לכם בצד פלוסים\מינוסים, לסגור חלקי קוד במסמכים ארוכים. ...

MVVM Part 4 – MVVM-Light

19 בDecember 2012

MVVM part 4 – MVVM Light דיברנו על MVVM  והזכרתי בפוסט הראשון (מבוא לMVVM),  שארחיב על הספריות הקיימות שמספקות לנו תשתית נוחה לעבודה עם MVVM , אז אם בא לכם להיכנס לעולם הMVVM , מומלץ בחום להתחיל עם MVVM Light, הוא פשוט, קליל, נוח לעבודה וחוסך זמן פיתוח. לMVVM Light ישנו toolkit חמוד שיתלבש לכם על הVisual Studio , ממש לא חייבים להתקין אותו ממי שפוחד מתוספות , אלא פשוט לקחת את הDLL  שלהם ולעשות לו Reference לפרויקט, אם תרצו  להתקין את הtoolkit כנסו לפה  ותזרמו עם המדריך. בVS 2010 זה מתלבש יפה על התוכנה , ב 2012 VS זה נראה לי קצת יותר מורכב, בכל מקרה אני...
2 תגובות

Service Locator

18 בDecember 2012

Service Locator Pattern תבנית פשוטה למימוש, שנחשבת כיום לטכניקת הנדסת תכנה פופולרית מאוד, חלק מתבנית Dependency Injection  מציג  פתרון דומה לבעיה ולפעמים הן "מתחרות ראש בראש" במי נבחר להשתמש. אחת הבעיות הנפוצות בעיצוב תכנה, היא כשאנו נכנסים לעולם אפליקציות מבוזרות (מופרדות לשכבות) ומנסים לחשוב אוקיי אז א' צריך את ב' האם נעשה לו אינסטנס בפנים? אולי סטטי? או אולי נדבר דרך פרוקסי, מה עם עוד אובייקט צריך אינסטנס .. גם שם נרים אובייקט לאוויר? כי יש לנו כמה פתרונות לבעיה כזו וכולם לא טובים. א.    לא נרצה ריבוי אובייקטים סטטיים במערכת. ב.    לא נרצה ליצור מופעים מרובים עבור אובייקט אחד בכל מקום שנזקק לשירותים שלו. ג.     לא נרצה יותר מדי תלות (Coupling) בין האובייקטים כי אז...
תגיות:
2 תגובות

MVC

10 בDecember 2012

MVC  יחד עם עוד כמה תבניות כמו MVVM  נחשבת יותר כתבנית ארכיטקטורה ולא כתבנית עיצוב קלאסית, אבל לנו לא משנה הפילוסופיה אלא התכל'ס ולכן נציג אותה כרגיל בצורה הפשוטה ביותר. אקדים ואומר שזה רלוונטי בעיקר למתחי WEB  ששם התבנית מיושמת היום היטב ופחות באפליקציות דסקטופ (בוודאי אפליקציות מהדור החדש) בטכנולוגיות Microsoft כך או כך הבנת השיטה יכולה לתרום הרבה למפתחים מתחילים על תכנון מערכת ועל תקשורת בין שכבות.. אני אישית פגשתי את MVC  לפני שידעתי כלום על תבניות עיצוב וזה שדרג בהרבה את החשיבה שלי על העולם התכנוני. אז מה זה MVC?  הרעיון אומר הפרדת צד הלקוח לגמרי מצד השרת וכל התקשורת ביניהם תהיה באמצעות מרכז פיקוח שנקרא Controller. התרשים...
7 תגובות

MVVM part 3 – First Real App

8 בDecember 2012

 MVVM part 3 – First Real Appכאמור, הצגנו את הרעיון של MVVM  בחלק א (מבוא) ובחלק ב' בנינו command עכשיו הגיע הזמן לבנות תכנית קטנה שנציגה איך עובדים עם התבנית. ראשית נפתח תכנית חדשה בVisual Studio מסוג WPF ונוסיף שני קלאסים. אחד ייקרא Model והשני MainViewModel כמובן שהמודל יכול להיות באסמבלי חיצוני, אבל בשביל הדוגמא זה לא רלוונטי. אנחנו נצטרך להשתמש בCommand שבניתי בפוסט הקודם או בכל אחד מוכן אחר, אז תכינו לכם אחד כזה או שתורידו אחר מהרשת, ותצרפו גם אותו לפרוייקט (שוב , גם הוא יכול לשבת בספרייה חיצונית). התכנית צריכה להכיל: א. את פרוייקט המקור של WPF  כמו שהוא נפתח עם Main Window, ב. קלאס מודל שנשים בתוכו...
תגיות: , , ,
אין תגובות

MVVM part 2 – WPF Command

1 בDecember 2012

  כדי שנוכל להתחיל לדבר על WPF  ועל MVVM  בפרט חשוב שנבין לפחות בצורה בסיסית כיצד משתמשים ב  Commands. כאמור הצגתי את התבנית בעבר בהרחבה , כולל דוגמא לבניית מנגנון Redo/Undo  בעזרת התבנית, החלק שחסר לנו זה המימוש הרלוונטי עבור WPF  כדי שדברים ירוצו כמו שצריך. אז command זאת שיטה לקבלת בקשות מידע מהמשתמש שנשלטת ע"י אירועים, וניתנת להפרדה, תחזוקה ושימוש חוזר. ממקומות שונים, בגדול הכוח של command זה להפריד את הקריאה לפונקציה מהמימוש שלה! לכן command  בד"כ ייראה לנו כעטיפה של פונקציה. (וזה בסדר לחשוב כך). אבל מכל זה, החשוב יותר הוא שCommand יכול להיקרא מתוך XAML code !! 2 דברים חשובים שיש לנו וניתן לייעל...
תגיות: , ,
3 תגובות