פוסטים

מחשבות על coupling ועל dependency injection

תמונה
אם הייתי צריך לבחור עקרון אחד לכתיבת קוד טוב וללכת איתו, זה היה לכתוב קוד שהוא loosely coupled. הפוסט הבא מדבר על החשיבות של כתיבת קוד בצימודיות נמוכה ועל איך הזרקת תלויות יכולה לעזור לנו עם הנושא. מה זה couplingמשמעות המילה coupling בעברית היא צימודיות והכוונה כשמדברים על צימודיות היא על כמה חזקה התלות בין מימושים בקוד.במילים אחרות - ככל שכמות השינויים והתסבוכות שאכנס אליהם כשאצטרך לעשות שינוי או להוסיף שכבת אבסטרקציה תגדל - כך הצימודיות תהיה גבוהה יותר.
coupled code vs decoupled codeהעיפו מבט בקטע הקוד הבא ונסו לחשוב אילו השפעות יכולות להיות לו על פיתוח התוכנה בעתיד

עכשיו דמיינו את המקרה הבא (והניחו שבניית מחשבים היה דבר פשוט שמסתכם בכתיבת מספר מחלקות וחיבורן יחד): כתבתי את המחלקה Computer, הפצתי אותה למגוון גדול של משתמשים וכולם יכולים ליצור מופע של המחשב שלי ולהינות מיכולות העיבוד המופלאות של Intel.
לאחר כמה חודשים הגיעה לאוזני השמועה שיש מעבד חדש בשם AMD. כעת אני רוצה שכל מי שירצה יוכל להחליף את המעבד שלו ולבחור אם ברצונו להשתמש ב AMD או ב Intel. אבל יצרתי בעיה.
כשהכנסתי את היצירה של Int…

מה זה singleton ולמה לא כדאי להשתמש בו?

תמונה
זהו פוסט קצר שמטרתו להציג את תבנית העיצוב singleton ומדוע אינני ממליץ להשתמש בה. הפוסט הינו חלק מסדרה שמטרתה לדבר על כתיבת קוד רע ו-anti-patterns בתחום עיצוב התוכנה.
מה זה סינגלטוןסינגלטון היא תבנית עיצוב ממשפחת ה creational, שמטרתה להגביל את יצירת המופעים של מחלקה מסוימת למופע יחיד, משתמשים בתבנית הזו על מנת שלא ליצור התנגשות בין אובייקטים בפעולות כמו כתיבה לזכרון, קובץ דאטאבייס וכו׳.

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

באופן הזה נקרא כל פעם למופע המחלקה באמצעות הפונקציה get_instance ונקבל את אותו המופע.
למה לא להשתמש בוסינגלטון היא תבנית פשוטה מאוד, אבל האמת היא שאין מתנות חינם.
הנה 4 סיבות (מהקלה לחמורה) לכך שאני חושב שלא כדאי להשתמש בסינגלטון:
בזבזנות בזיכרון שימוש בסינגלטון הוא אינו יעיל בהיבטי זיכרון כשמדובר על סביבות בהן יש garbage collector. במקרים בהם משתמשים בסינגלטון בשפות כאלו (כמו java ופייתון), השפה מגדירה את האובייקט כחשוב (מכיוון שיש אליו רפרנס סטטי) ול…

מה חדש בפייתון 3.9

תמונה
בשבוע שעבר שוחררה גרסת פייתון 3.9 והיא כרגיל מביאה עמה כל מיני דברים מעניינים.כשמשתחררת גרסה של פייתון, בדרך כלל ה release notes מחולקים לנושאים כמו:
syntax features, built-in features, new features in the standard library, Interpreter improvements, and new library modules. מטרת הפוסט היא לכלול כמה מהדברים שאני מצאתי מעניינים ושיוכלו להעיל לי בחיי היומיום כמפתח.שימו לב: בגרסה 3.9 החבר׳ה של פייתון לקחו צעדים רציניים נוספים בהורדת התמיכה ובתאימות לאחור אל מול פייתון 2.7. בעבר פיצ׳רים פותחו עם תאימות מסוימת לאחור אבל מגרסה לגרסה הפיצ׳רים תואמים פחות ואף יורדת תאימות בפיצ׳רים ישנים. זאת ניתן לראות לפי Deprecation Warnings על גבי ספריות ישנות. אם אינכם בטוחים באילו פיצ׳רים אתם משתמשים שאינם נתמכים עוד, השתמשו במדריך הזה על מנת לבדוק זאת.
הפיצ׳רים החדשיםאופרטורים למיזוג ועדכון dictionariesאחד הדברים שאני הכי אוהב בגרסאות חדשות של שפה זה תוספות ל-syntax. באמצעות הפיצ׳ר החדש הזה נוכל בקלות לעדכן ולמזג מילונים.
אם עד כה היינו משתמשים בפונקציה dict.update וב {d2,**d1**} על מנת לעדכן ולמזג באופן הזה:…

הפרדה לתתי פרויקט באמצעות git submodules

תמונה
פעמים רבות כשאנחנו מתחילים פרויקט איננו יודעים מה יהיה גודלו הסופי, כמה מחלקות הוא יכיל, ואיך יראו התלויות. לפעמים, כמה שלא ננסה לתכנן את הכל מראש, נגיע למצב בו אנחנו רוצים להפריד חלק מה-codebase שלנו לפרויקט נפרד. הסיבות לכך יכולות להיות:
1. ניסיון לשמירה על single responsibility principle (כן, הוא לא נכון רק לפונקציות ומחלקות)
2. עובדים על הפרויקט כבר יותר מדי אנשים וביצוע פעולות גיט מרובות לאותו פרויקט על ידי הרבה אנשים יכול ליצור לא מעט צרות וקונפליקטים.
3. לפעמים, בתוך באותה חברה נרצה שמספר צוותים יעבדו על (או ישתמשו ב) אותו פרויקט.
4. במקרים מסוימים אפילו נרצה לקחת חלק קטן מהקוד שלנו (לדוגמה פעולות אוטומציה נפוצות) ולהוציא ל open source. מטרת הפוסט הזה הוא להציג שלושה נושאים:
הראשון - הפרדת הפרויקט לתתי פרויקטים 
השני - מתי נרצה להשתמש ב submodules?
השלישי - צריכת תתי הפרויקטים באמצעות git submodules. הערת צד: אינני הולך לדבר על מימוש ההפרדה עצמה, הפוסט מניח שהקורא יודע לפתוח פרויקט, להזיז קבצים אל הפרויקט החדש ולדחוף אותו ל source control. איך מפרידים את ה…

הדרך הנכונה היחידה לכתוב קוד?

תמונה