חוויות תכנות אנדרואיד קשה

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

קנט בק

העלות הכוללת של בעלות על בלגן

לפני מספר שנים, כמו כל מפתח אנדרואיד תמים העובד בהפעלה מוקדמת בהודו, ניסיתי "לפרוץ" בעיות בעולם האמיתי, "לשבש את הענף" ולהכניס "שקע ביקום". בלי לדאוג בעולם לעיצוב תוכנה או ארכיטקטורה טובים, התחלתי לכתוב קוד לבניית אפליקציית אנדרואיד שתהפוך יום אחד לאחת האפליקציות הגדולות ביותר לצרכני טיפול בהייד בהודו.

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

הורדות ודירוג של חנות Google Play של האפליקציה שלנו.

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

האנדרואיד קונונדרום

הקוד נראה מכוער, פעילויות הצליחו הכל:

  • הברגה
  • קלט / פלט
  • חישוב
  • פריסות
  • הגדרת שינויים
  • מה לא

אחרי הכל, פעילויות הן בקרים, נכון? או שזו השקפות? כבר לא ידעתי.

MVC

העיצוב הגדול החדש בשמיים

היינו צריכים לתכנן את האפליקציה באופן ששינוי קו קוד במקום כלשהו לא שבר משהו במקום אחר. האפליקציה הייתה צריכה להיות, כמו שאומר הדוד בוב, "חסון אך לא נוקשה, גמיש אך לא שברירי".

רוברט

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

  • הוספנו שכבת "שירות" והעברנו לתוכם את כל הקוד שאינו ממשק המשתמש, שירות אחד בכל פעם.
  • צחקקנו את AsyncTasks ועברנו ל- ListenableFutures בעזרת גויאבה.
  • זרקנו את AsyncHttpClient עבור OkHttp.
  • אך חשוב מכך, התחלנו לקרוא הרבה: קוד נקי, אדריכלות נקייה, SOLID, DRY, המתכנת הפרגמטי, Java Concurrency In Practice, עיצוב מונע תחום וכו '.

עד מהרה התחלנו לראות את היתרונות של מאמצינו. הפריון עלה, כתבנו דברים מהר יותר, כולם שמחו.

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

אומנות הקוד הנקי

אחרי שצפיתי בסרטונים של הדוד בוב על אדריכלות נקייה מספר פעמים וקראתי רבות בארכיטקטורת האפליקציות לאנדרואיד, החלטתי להתנסות בדפוס העיצוב של MVP ו- RxJava.

כמה ימים לאחר הניסוי, החלטנו לעבור ל- RxJava ולהטמיע MVP באמצעות Clean Architecture. דאגנו שנארף את כל השכבות מאחורי הממשקים ונפריד היטב את החששות.

  • התצוגה, המיושמת בדרך כלל על ידי קטע, מכילה הפניה למגיש. הדבר היחיד שהתצוגה תעשה היא לקרוא לשיטה מהפרזנטור בכל פעם שיש פעולת ממשק.
  • המגיש אחראי לנהוג כאיש האמצע בין נוף לדגם. הוא מאחזר נתונים מהדגם ומחזיר אותם בפורמט לתצוגה. אך בניגוד ל- MVC האופייני, היא גם מחליטה מה קורה כשאתה מתקשר עם ה- View.
  • המודל הוא רק השער לשכבת התחום או ההיגיון העסקי.
  • האינטראקטור עוסק בקלט / פלט ומספק נתונים שיוצגו בתצוגה.

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

חוק צופי הבנים

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

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

סיכום

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

ישנן גישות שונות ומגוונות כלפי MVP והרבה פתרונות מעניינים להתאים אותה לאנדרואיד. העובדה שאיננו יכולים להכחיש היא שקוד נקי חשוב, ואתה פשוט לא יכול לטאטא אותו מתחת לשטיח.

פוסט זה מושאל בכבדות מהקוד הנקי של הדוד בוב וגונב את הכותרת מתוך שיחת הדרואידקון של קאשיף משנת 2011.

אם קוד נקי חשוב לכם, בואו נפטוט :) טוויטר: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

אם אהבת את הפוסט הזה, אנא הכה בלב הקטן! ❤