יום שלישי, 7 במאי 2019

רוני: שכבות ומודולריות בפרויקטים

 

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

מהו פרויקט מודולרי?

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

מה היה בעבר?
בעבר כל הקוד היה נכתב בקובץ אחד ובתהליך אחד וגם היה רץ על שרת אחד שנותן את כל המענה למשתמש.
יכלו להיות  גם כמה שרתים שעבדו במקביל כדי שיוכלו לתת מענה ליותר ויותר משתמשים אבל עדיין כל שרת הכיל את כל הקוד וכל הקוד היה נרשם בשכבה אחת

מה היה לנו רע בשיטה הזאת? 

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


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

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

מה הקשר בין הסיפור היפה הזה לפרויקטים?

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

אז מה הן השכבות בפרויקטים

1) שכבת הUI
2) שכבת הCONTROLLERS
3) שכבת הBL
4) שכבת הDAL
5) שכבת הDATA

שכבת הUI

User Interface. שכבה זו אחראית על מה שהלקוח שלנו רואה בתכלס.
למה זה צריך שכבה נפרדת?
תארו לכם שאתם בונים תוכנה של בנק ולבנק יש אתר אינטרנט, דפי האינטרנט יהיו בשכבת הUI.
אם יום אחד תהיה דרישה ממנהלי הבנק שהם רוצים גם אפליקציה לIOS, אתם תוכלו להשתמש באותה התוכנה של האתר ולפתח רק ממשק גרפי של אפליקציית IOS.
ביום שתרצו לעשות גם לאנדרואיד אפליקציה אתם שוב תכתבו רק ממשק גרפי באנרואיד סטודיו.

שכבת הCONTROLLERS 

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

שכבת הBL 

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

שכבת הDAL 

בשכבה זו נכתב הקוד ששולף את המידע ממסד הנתונים. כל שאילתות הSelect וכל הפקודות הInsert והDelete נכתבות בשכבה הזאת.

שכבת הDATA

בשכבה זו יהיה המסד נתונים שלנו.

אז איך נראית צורת העבודה הזאת?

1) הלקוח לוחץ באפליקציה שלנו על האופציה לראות את ריכוז היתרות בחשבון שלו
2) נשלחת בקשה מהאפליקציה אל השרת והיא מגיעה לשכבת הCONTROLLERS
3) הCONTROLLER מפנה אותה אל פונקציית ריכוז יתרות שנמצאת בשכבת הBL
4) פונקציית ריכוז יתרות מבקשת מהDAL את הסכום שיש בעו"ש
5) הDAL עושה שליפה לסכום היתרה בחשבון משכבת הDATA כלומר מהמסד נתונים ומחזיר את זה לBL
6) הBL מבקש הפעם מהDAL את הסכום שקיים ללקוח בקופות חיסכון שונות
7) הDAL עושה שליפה לסכום ששמור בחסכונות משכבת הDATA ומחזיר את זה לBL
8) הBL מבקש הפעם מהDAL את הסכום שהלקוח חייב לבנק מההלוואות השונות
9) הDAL עושה שליפה לסכום שהלקוח לווה מהבנק משכבת הDATA ומחזיר את זה לBL
10) הBL מבקש הפעם מהDAL את סכום החיוב הקרוב באשראי
11) הDAL עושה שליפה לסכום החיוב הקרוב באשראי משכבת הDATA ומחזיר את זה לBL
12) הBL מחשב את סכום היתרות ואת סכום החובה ואת השקלול של שניהם ביחד ומחזיר את התשובה לCONTROLLER
13) הCONTROLLER מחזיר את התשובה לUI כלומר לאפליקציה
14) האפליקציה מסדרת את התשובה בצורה יפה על המסך

אחרי שהתהליך הובן אפשר להבין למה חשובות שכבת הDAL והDATA כמו שהן בשכבות נפרדות.
אם הבנק יחליט שהוא עובר למסד נתונים XML או למסד נתונים א-רלציוני של My-SQL נצטרך לבנות מחדש את שכבת הDATA ולהחליף את שכבת הDAL לסינטקס שמתאים לXML או לMy-SQL

מה הרווחנו מזה?
בתהליך הזה שכבת הBL לא תשתנה כי שמות הפונקציות בDAL לא ישתנו אלא רק התוכן שלהן ואז אנחנו לא עושים עבודה קשה ומיותרת בשאר הפרויקט

לסיכום

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

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

אם יש לכם שאלות או דברים שלא מובנים אתם מוזמנים לשאול בתגובות או לשלוח לי הודעה

רוני לוי 

אין תגובות:

הוסף רשומת תגובה