מדריך ארכיטקטורת תוכנה - שיעור 1 - מהי ארכיטקטורה
-
שלום לכולם
המדריך הזה נועד עבור מי שרוצה וחפץ לממש את הסטטיסטיקה שהרגע המצאתי "שעה של מחשבה = מאה שעות עבודה" בבחינת יפה שעה אחת של קורת רוח בעולם הבא יותר מכל חיי העולם הזה. למה דווקא 1=100 את זה המצאתי, אבל העיקרון ששעה מחשבה שוה להרבה מאוד שעות עבודה, עם זה כולם מסכימים.
לאחרונה פרוייקט שלנו של 4 חודשים נכשל והרבה שעות עבודה הלכו לטמיון בגלל שלא השקענו זמן בתיכנון, ניסינו לזרום וחטפנו מכה.
שמעתי בשם המתכנת של "תג" (שאגב הוא כתב אותה בשפת C נקייה, והוא אמר לי שהוא לא אוהב את השפות שכל שנתיים מחליפים קומפיילר, אבל זה נושא לדיון פילוסופי אחר) שעל קוד שלוקח לו שעה לכתוב, לוקח לו שעתיים לבדוק. זהו קוד נקי מנופה בשלש עשרה נפה. אני רוצה להסביר איזה חטא זה לכתוב קוד מלוכלך, שם לוקח לך רבע שעה לכתוב, אבל אחר כך חמש ועשר שעות עבודה להתמודד במצבים של אל-חזור.הקצב שבו פרוייקט לא מתוכנן מכה בך, הוא מעריכי, כלומר, בוא נניח שקוד לא מתוכנן, לא נקי וכו', דורש ממך השקעה של חצי שעה עבודה על כל שעה של כתיבת קוד מלוכלך כשאתה בא לממש אותו אחר כך, או להרחיב אותו. תארו לעצמכם, בהתחלה אתם צריכים להתמודד עם באגים לתקן, לעשות טלאים, לקרוא שוב ושוב ולא להבין מה כתבתם, במשך חצי שעה על כל שעה של כתיבת קוד. אוקי, עברנו בשלום את חצי השעה ואנחנו רוצים להמשיך הלאה, אבל רגע!!! כרגע הקוד הזה הוא "ליכלוך בן שעה וחצי!!!!!!!!!!" אוי ואבוי, זה אומר שבפעם הבאה, תידרש מאיתנו 3/4 שעה לעבוד איתו!!! שימו לב! כל הרחבה של קוד לא נקי, הופכת אותו לעוד יותר לא נקי, ולעוד יותר קשה לעבודה ולתחזוקה אחר כך!!! אז עכשיו יש לנו קוד בן שעה וחצי, שכדי לעבוד איתו נידרש לשלשת רבעי שעה, ואז הילד הזה גדל עם החינוך העקום שלו, והוא מגיע לגיל של שעתיים ורבע, זמן התחזוקה גודל לשעה ושבע וחצי דקות, וכן הלאה.
בסופו של דבר הקריסה היא רק עניין של שבועות ספורים, והרבה מאוד מתכנתים מתייאשים מלכתוב תוכנות גדולות רק מהסיבה הזאת, כי אם פרוייקטים קטנים קורסים להם ככה, מה יעשו עם פרוייקט לניהול רשימת מכולת..............
הכלל הזה הוא נכון בכל תחומי החיים, בעסקים, בשלום בית, חינוך ילדים, לימודים, וכמובן לעניינינו ארכיטקטורת תוכנה.
הרב שלי פעם הסביר לי, את הסיבה שבאמזונס עדיין חיים שבטים פרימיטיביים שלא התקדמו לשום המצאה, ולו המינמלית ביותר של תקופת אברהם אבינו, הוא הסביר את זה ככה, מחסור הוא אבי ההמצאה, ובאמזונס הואיל והטבע שם עשיר מאוד, ובהושטת יד משיגים בננה או קוקוס טריים, אין מחסור, ולכן אין שום מניע להתקדם ולהמציא המצאות.
חברת השפע לאחר כל ההמצאות, הפכה אותנו בעצם לחיים באמזונס בחזרה ולפי ההיגיון, התבונה של המערב אמורה לשקוע תוך כמה מאות שנים, לא נדון בזה כרגע, גם האתר הזה נועד למתכנתים ולא לאנתרופולוגים. אבל יש משהו שכן נוגע לכאן, כאשר שפה עילית של תוכנה, נותנת לנו תחושה שהכל עובד ואין צורך ברעיון, זאת אחיזת עיניים שהיא לרועץ עבור מתכנתים. כשיצרו פונקציה שבנויה תחת אשכול ענק של קוד, ואנחנו מפעילים אותה בשיא הנוחות. זה נותן תחושה של "הנה הכל זמין אין צורך להמציא כלום" ואז באופן טבעי נוצרת אשליה של שפע, כאשר מעבר לפינה ממתינות לנו שנות רעב שגם פרעה לא יכל לחלום עליהם.
למעשה כל מתכנת שרוצה להצליח צריך לחשוב שנתיים קדימה מה הוא הולך לעשות עם הקוד הזה, ובאלו מצבים. אני לא מדבר על אחד שזה עתה למד לעשות מסג' בוקס, והוא נהנה מעצם החוייה שבה הוא כותב "שלום עולם" והמסך נשמע להוראותיו, תנו לו לחיות ואל תשגעו אותו. אני מדבר על אחד שכבר עובד ומרויח, ורוצה להתייעל עם הזמן.
אז אחרי כל הפילוסופיות אפשר להתחיל.
מה שכבר כתוב בויקיפדיה אין צורך לחזור עליו (יש ערכים שהם חובה גמורה לכל מתכנת כגון צימוד לכידות , ועוד, אבל לדעתי, חסר חומר פילוסופי, על ארכיטקטורה של נתונים, IT. דהיינו בראש ובראשונה תיכנון מסד נתונים מנורמל. ולאחר מכן עבודה נקייה עם קוד שמטפל בDATA.
אחד הויכוחים הגדולים, בתיכנון מסד נתונים, האם יש לחסוך בכמות הטבלאות, ולעמעם במקצת את איפיון הנתונים, או להיפך, להקפיד על איפיון ולצורך כך להיות פזרן בטבלאות.
ניקח דוגמא:
יש לנו הרבה combobox בתוכנה, נניח בתוכנה ממוצעת יש משהו כמו 80 combobox. מנין לקוחים הערכים שברשימה????
לי ידוע על 3 שיטות- כל ערך שמוקלד אי פעם נכנס לרשימה והופך להיות חלק ממנה. שיטה זו בעיני היא נלוזה ועקלקלה, ואין בה שמץ של ארכיטקטורה, כבר עדיף לעבוד עם אקסל, הוא באמת נותן השלמה אוטומטית לכל מה שיש מעליו.
- לעשות טבלה מיוחדת לכל combobox שיכיל את הערכים שלו (בדרך כלל באמצעות key-value דהיינו ID ו string) ככה יש לנו שליטה מלאה בחומר.
- טבלה אחת גדולה שתכיל את כל הערכים של כל ה combo בתוכנה, עם שדות שתפקידן לסנן את הערכים שלא יתערבבו קומבו בקומבו.
דוגמא נוספת יותר קיצונית:
יש לנו תנועות פיננסיות מכל מיני סוגים, הוראות קבע, שיקים, מזומנים, העברות בנקאיות, שוברים, ועוד הרבה, וכל זה תכפילו בשניים לפחות הוצאות והכנסות (יש גם זיכויים וחיובים אבל הבה ונעצור כאן) שוב יתווכחו המתווכחים, יש שיעשו טבלה לכל נושא, טבלה להכנסות בהוראות קבע, טבלה להכנסות בשיקים, טבלה להכנסות במזומנים, שוברים, העברות, וכן להוצאות, כעת מה יהיה אם יש לנו תרומות ושכר לימוד??? האם צריך טבלאות נפרדות לשכר לימוד, ולתרומות? אפשר להגיע במוסד ממוצע ל 30 טבלאות בלי גוזמא, אם ניצמד לעיקרון שכל נושא הוא טבלה בפני עצמה.
השיטה האחרת אומרת, טבלה אחת גדולה של הכנסות, כאשר השדה "אופן הכנסה" אמור להצביע על סוג התנועה, באיזה אופן בוצעה. בהוראת קבע או בשיק וכדומה.
שיטה יותר קיצונית אומרת, טבלה אחת גדולה שתכיל גם את ההוצאות וגם את ההכנסות, ויהיה שדה שיגדיר Type האם מדובר בהוצאה או בהכנסה, שדה נוסף שיגדיר את אופן התנועה (וכאן אנו חוסכים ב combo וב UI ובניהול של קוד!!!! כי הכל בטבלה אחת וממילא גם מבנה אחד בקוד)בשיעור הבא נדבר באיזו שיטה צריך לבחור.
בהצלחה לכולם!
פורסם במקור בפורום CODE613 ב15/07/2013 13:02 (+03:00)
-
דבר אחד שצריך לזכור. (לפחות מתחילים).
בלי שכותבים קוד מלוכלך לא מבינים בשביל מה צריך קוד נקי.
וגם לפעמים המבנה של התוכנה מתבהר תוך כדי כתיבת הקוד כך שלעיתים איך ברירה אלא לכתוב קוד מלוכלך ואחרי זה לשכתב אותו במידת הצורך.
פורסם במקור בפורום CODE613 ב16/07/2013 23:32 (+03:00)
-
נכון מאוד!!!!
יש דווקא גישה כזאת של לכתחילה, לכתוב קוד פעמיים, בפעם הראשונה לכתוב כלאחר יד לפי הצורך, ובפעם השניה לעבור על הכל ולכתוב אותו מחדש לאחר שמבינים את הצרכים.אך דא עקא, צריך בשביל זה מנה כפולה ומכופלת של משמעת עצמית, כי העצלות אחרי שהדבר כבר נוצר לבנות אותו מחדש, היא גדולה מאשר מראש לבנות כמו שצריך.
באופן אישי אני ממליץ לקיים את שני השיטות, דהיינו לכתוב מלכתחילה קוד נקי וזך, ואחר כך לעובר עליו שוב ולכתוב אותו "עוד יותר נקי".......... כפי שלימד אותנו וייסמן המתכנת של תג.
פורסם במקור בפורום CODE613 ב16/07/2013 23:37 (+03:00)
-
אם ניסיתם פעם לכתוב ב C או C++ זה באמת כמו שויסמן אמר - אתה כותב שעה ובודק 2 שעות,
כיון שאין לך את כל הכלים שיש בדוטנט, כל ההתראות של גלישה מחוץ למערך וכדומה לא קיימות בשפות C ועוד שלל התראות, חיפוש של סימבולים והחלפת שמות סימבולים , ב- C אתה צריך לחשוב לבד על הקצאת זיכרון ולבד לדאוג לשחרר אותו דברים שבדוט נט קורים לבד מאחורי הקלעים, C היא שפה שאתה מנהל שם הכל לבד וזה המעלה שלה כי כך ניבנת תוכנה תפורה במדוייק לתפקיד שלה, וגם החיסרון כי הדבר לוקח הרבה זמן עבודה ובדיקות, ועוד המון דברים לא נתמכים כלל ב C לאומת דוט נט.
אבל בדוט נט אפשר לכתוב קוד נקי מהתחלה, אם לא מיד יושבים וכותבים אלא קמים מהמחשב מסתובבים קצת ומתכננים בראש מה המטרה? באילו דרכים אפשר להגיע אליה ? וכו' וכו'פורסם במקור בפורום CODE613 ב17/07/2013 16:32 (+03:00)
-
סתם ליידע כללי. לא שאני מסכים איתו במאה אחוז, אבל למעשה הוא עושה את העבודה אצלי בשותף.
המערכת WordPress בנויה בצורה ממש חביבה ברמת המסד נתונים. יש לך "טבלה ראשית" וטבלה של "Metadata".לצורך העניין בנושא הפוסטים. יש לך טבלה בשם posts, שהיא למעשה שומרת את הנתונים הראשיים. אם זה התוכן; כותרת; מחבר (Author); תאריך יצירה / עדכון; וכדומה. מצד שני, יש לך טבלה בשם postmeta. שהיא למעשה שומרת לך את כל הערכים הנוספים (בצורה של Key => Value).
עכשיו, הרעיון פה (הכל נעשה אוטומת מאחורי הקלעים), שברגע שאתה עושה קריאה לפוסט עם ID במספר X (למשל), אז אוטומת המערכת אוגרת ב-Cache את כל ה-Key => Value של אותו פוסט. ככה שאתה למעשה ניגש לכל ערך שמה ברמת המשתנה (ללא צורך בשאילתא נוספת).
אני אישית מאוד נהנתי מהרעיון הזה, כי למעשה השמיים הם הגבול ברמת המסד נתונים. למעשה, אתה לא משנה בכלל את המסד נתונים, כי כל שדה נוסף שתרצה להוסיף / להחסיר, אתה פשוט עושה לו הוספה בטבלה של ה-postmeta.עוד משהו "מגניב" שיצא לי להתקל ב-WordPress, שיש לך אפשרות אפילו לשמור אובייקט / מערך לתוך שורה בודדת במסד נתונים. זה מאוד נוח (אולי לא עוזר במידה ותרצה לעשות שאילתא על פי אותו נתון). אבל הרעיון שעומד מאחוריו, זה לפני ההכנסה של אותו שדה למסד נתונים לתרגם את האובייקט / מערך למחרוזת, ובשליפה לדעת לתרגם ממחרוזת בחזרה לאובייקט. (עיין עוד כאן: http://php.net/serialize).
פורסם במקור בפורום CODE613 ב03/01/2014 00:35 (+02:00)
-
אין עניין לרשום כזה מאמר מבלי שאנשים ינסו לעבוד איתה בצורה רגילה.
הפלוס של המערכת הזאת שהיא מיועדת גם לאנשים "רגילים", אבל מי שמתכנת, השמים הם הגבול עם המערכת הזאת. ככה שאין לך ממה לפחד <!-- s;-) --><img src="{SMILIES_PATH}/icon_e_wink.gif" alt=";-)" title="קורץ" /><!-- s;-) -->פורסם במקור בפורום CODE613 ב05/01/2014 07:50 (+02:00)
-
הפלוס של המערכת הזאת שהיא מיועדת גם לאנשים "רגילים", אבל מי שמתכנת, השמים הם הגבול עם המערכת הזאת. ככה שאין לך ממה לפחד <!-- s;-) --><img src="{SMILIES_PATH}/icon_e_wink.gif" alt=";-)" title="קורץ" /><!-- s;-) -->
כשאתה כותב את זה יש לי תחושת דז'ה וו
מזכיר לי את מה שמספרים מי שכותבים באקסס,מה דעתך להעלות לכאן מדריך שייקרא בשם "מדריך לקישקע של וורדפרס" זאת המערכת הכי פופולרית בעולם, והקישקע שלה כל כך מרתיע את אנשי הטשולנט התיכנותי.... לפחות אותי
וזה מה שעונים להם המתנגדים :lol: :lol: :lol:
פורסם במקור בפורום CODE613 ב05/01/2014 09:01 (+02:00)