[בקשה] תובנות על Angularjs
-
אני, בJS ובצד לקוח בפרט, אני לא מתעניין יתר על המידה ב"מתחת למכסה המנוע".
כיון שאני מאוד מחבב את angularjs אני יפרוס את משנתי בעניינו:עבודה על דפי אינטרנט עם דינמיות (קרי JS)
בנויים משפת ריצה (שזה JS פרוצדורלי או פונקציונלי), ושפת תצוגה של חזות המסמך (שזה קוד הצהרתי שכולל HTML+CSS).
התקשורת בין הDOM שזה המסמך כשהוא מוצג בדפדפן, לבין הקוד, נעשית במגוון דרכים איומות שהחסרונות שלהם הם:
א. חיבור חזק מידי בין קוד הריצה לבין שפת התצוגה. שינוי בעיצוב גורר שינויים בקוד וליהפך.
ב. פיזור: כל התנהגות יכולה להיווצר בכמה מקומות, יכול להיות הרשמה לאיורעים במקומות רבים, ואם יש כמה קבצי קוד צריך פשוט לעבור שורה שורה לפעמים כדי להבין למה כשעושים X קורה Y.
ג. הסנכרון בין המידע לבין התצוגה מייגעים מאוד, כל שינוי במידע צריך "לרדוף" אחרי התצוגה ולהיפך.כמו כן, השימוש בJS בצד לקוח קשה מאוד. מדובר בשפה ישנה פרימיטיבית בהמון נושאים, וכל דבר קטן מחייב הרבה קוד. ישנם המון ספריות שמקלות את החיים, אבל אין הרבה שהם alll in one.
עד כאן הרקע.
בשביל לפתור את בעיית הקשר בין שפת הקוד לשפת התצוגה נוצרו ספריות שהתפקיד שלהם היה binding מן אוטומציה קוסמית שמחברת את התצוגה לקוד, כשבתצוגה מצהירים על שמות וכדומה, ובקוד מחברים את השמות לאובייקטים באופן שהתצוגה "עוקבת" כביכול אחרי המידע.
בשביל לפתור את הבעיה של JS יש ספריות רבות כמו jQuery שנחשבו all in one אבל בהיבט מצומצם של ניהול הDOM יותר מאשר בהיבט של ניהול כל האפליקציה - קרי SPA, שבו הקוד אחראי לא רק לצבוע אלמנט, אלא ממש לעשות Buisness Logic.
למשל, משימות טריוואליות של מילוי התצוגה במידע נראות גם בjQuery ממש כמו איזה hack. שום דבר לא מובן מאליו כי נקודת המוצא הייתה שמידע אמור להגיע עם הדף ולא בajax.angularjs הגיעה בשביל זה והיא עושה זאת מאוד מאוד טוב.
כעת לשאלות:
- מכיר, אני חושב שנכון לקרוא לangualr.js ספריית jQuery משוכללת בהרבה, שבמקום לפתור בעיות כמו jQuery היא מחקה אותם לגמרי. אני לא יודע עם הסלוגן הזה עומד בהגדרה של "תובנה שעזרה לי להבין", לא בטוח שאני מבין אני משתמש...
- איפה להתחיל... הכי טוב זה להשתמש ורק מידי פעם לחפש מה עשו קודם באותה סיטואציה, אני חושב שזה בגדר תמונה אחת יותר מאלף מילים.
-
בקשר לDI,
כדי לעזור לך אני אעליב אותך ואאשים אותך בגאוה שאינך מסוגל להשתמש בדבר שאינך "מבין" אותו עד כדי יכולת ממש להנדס אותו בעצמך.
מה הרווחת מהעלבון הזה? שתשאיר את הנקודה של הDI לאחרי ההתעמקות באנגולר... DI זה נושא חשוב וגדול בהרבה מאנגולר, אבל הוא סה"כ צורת התנהגות, לא טכנולוגיה או יכולת חדשים. -
לגבי Dependency Injection
המנגנון די פשוט
מה שמסובך יותר זה להבין למה ומתי להשתמש בובעקרון זה מחלקה שמנהלת את האובייקטים שתצטרך בכל הפרויקט
אתה צריך לרשום את האובייקטים ל service provider שאחראי על ההזרקה
ולהגדיר את סוג המופע שלהם, האם זה מופע יחיד לכל התכנית,
או מופע חדש עבור כל הזרקה, או לשלב ביניהםואז בכל מקום שתצטרך את אחד האובייקטים תוסיף אותו כפרמטר לבנאי
וה sp יזריק אותו באופן אוטומטילמנגנון הזה יש המון יתרונות,
אני חושב שנושא האחריות שמתרכזת אצל הsp
והרעיון שהתלות של הפונקציות נחלשת
הם הנושאים המרכזים,באנגולר משתמשים בזה הרבה כדי לשתף מידע בין קומפננטות
רושמים מחלקה בעלת מופע יחידני (מזריקים אותה ל root )
ואז היא בעצם כמו מחלקה סטטית -
@dovid
תודה רבה על התשובות המושקעות!
האמת היא שנתת סקירה כללית... ואם קראת את השאלה זה לא מה שביקשתי. אבל בכל זאת עזרת לחדד עבורי ש:-
א) זה לא הוגן לבקש מאחרים ליכנס לראש שלי ולהבין איפה בדיוק המפתח שיפתח בשבילי את ההבנה,
וב) הכי טוב לעבוד גם בלי להבין לעומק וההבנה בוא יבוא.כדי לעזור לך אני אעליב אותך
להעליב -- הצלחת, לעזור -- הזמן יגלה...
נ.ב. תתחדש על שידרוג גירסת הפורום, האם שמת לב שעדיין יש כמה באגים בריטול ?
-
@yossiz אמר ב[בקשה] תובנות על Angularjs:
בנוסף לבקשה הכללית הנ"ל,
אני מסתבך לגמרי עם Dependency Injection.
למה????
מה זה נותן לי כל הסיבוך הזה?
מה רע במודולים רגילים כמו שאבות אבותינו עשו בנוד?אפשר לנחש שהמטרה המרכזית היא להשאיר את הnamespace נקי, כדי לאפשר מודולים בסביבת דפדפן צריך לטעון ספריות חיצוניות או לארוז עם webpack וכו', ואם אתה רוצה לאפשר עבודה נקיה עם אנגולר JS בלי סביבות פיתוח מורכבות אז הדרך היחידה היא לבנות בעצמך את המודולריות.
ובאמת זה לא רק אבות אבותינו אלא אנו ובנינו עד היום עובדים באנגולר עם מודולים, אבל צא ולמד כמה זה סיבך את הסביבת פיתוח, עד כדי שהם הוצרכו לפתח את ה CLI, אחרת זה מורכב מאד לעבוד איתם. יתכן שבאנגולר JS היתה מטרה לשמור על הפריימוורק מינימלי. -
אההמ @yossiz, זה קצת חריף לומר לי "אם קראת את השאלה". כתבת ברור שתי שאלות וייחדתי על שניהם את הדיבור בסוף הפוסט שלי (אכן אפשר לומר שזה לא עונה אבל אי אפשר לומר שלא קראתי...).
איך ידעת שהחלפתי גירסה? ואיזה בעיה יש עם הריטול מלבד ההיפוך לכל פיסקה שמתחילה בלועזית?
-
@yossiz
אני מנסה להבין את ההרגלי למידה שלך ולא כ"כ מצליח
אני ינסה להסביר איך אני לומד ואולי זה דומה
לי בעיקרון יש בעיה שאני יכול לשבת וללמוד רק נושא שנראה לי מעניין
ולרוב כדי שיהפוך למעניין אני צריך בעיה או חסרון שבו אני נתקע ואז אני חייב פתרון
ומחפש את המדריך/פורום התורן מנצל את זה בשביל ללמוד קצת מסביב וממשיך הלאה
אבל אם אני מוצא קומבינה כל שהיא אני מוותר על הלמידה
(אגב מסרטנים אני אף פעם לא מצליח ללמוד כי נגמר לי הפתילה אחרי 45-70 שניות)
למשל אני עדיין לא השתמשתי בJOIN בSQL כי כשקראתי פעם מדריך על זה לא הבנתי כל כך את הנקודה
ופשוט השתמשתי בכל קומבינה אחרת ולא השתמשתי הJOIN
מה שאני בעיקר מפסיד לכאורה זה שיש כלים טובים שיכולים להקל לי על החיים ואני פשוט לא מודע לקיומם
אז בשביל זה יש לי את הפורום הזה וכן אני נהנה להקשיב לפודקסטים תוך כדי שאני עושה דברים אחרים (שטיפת כלים ,הליכה לכולל/למשרד) וככה אני שומע על דברים אחרים ולמה הם מועילים
אני אשמח לשמוע טיפים מאחרים איך מתגברים על לקויות אלו
אבל במקרה שלך הייתי שואל האם אתה סתם בודק מה אפשר לעשות עם כלי פלוני (ואז צריך להמציא בעיה בשביל לפתור אותה )
או שאני מנסה לפתור בעיה מסויימת שיש לי ולחתור ישר לשם ומשם להתרחב (לפעמים אני צריך להחזיק את עצמי בשביל לעבור את השלב הזה) -
@yossiz
רברס עם פלטפורמה פודקסט עברי עם נושאים מגוונים (הם פרסמו מתישהו קובץ ZIP של כמה שנים שיהיה נוח להוריד הכל לנגן)
stackoverflow לא יצא לי להאזין אבל אומרים שהוא טוב
changelog פודקסט מצויין באנגלית יש להם על GO,JS,AI ועל עוד הרבה נושאים מגוונים (אמנם קצת מפריע לי כשמראיינים נשים )
ואגב יש להם רשימת תפוצה שהם שולחים כל יום רשימה של ספריות גיטהאב נבחרות (אין לי מושג לפי מה?אולי הם פשוט מורידים את הtrending של גיטהאב) אני מידי פעם עובר על זה ומוצא שם כל מיני דברים שימושיים -
-