1-2-3 Tier!
רק לוודא שזכרוני אינו מטעני בנוגע לשכבות בהקשר של פיתוח מערכת,
להלן תיאור קצת ולא מדוייק מזכרוני, ובסוף מספר שאלות הבהרה:
שכבה אחת
לא היתה באמת הגדרה לנושא, אבל מדובר במערכות Stand Alone לפני מספר עשורים,
פשוט מערכת שבה יש UI שבתוכו כתובה גם כל הלוגיקה, הכל כמקשה אחת.
שתי שכבות / Two Tier
הפרדה ל UI ול Business Layer,
מפסיקים לכתוב קוד ספגטי הכולל מימוש לוגיקה בצד ה UI ופניות ישירות לבסיס הנתונים,
אלא מממשים הפרדה בסיסית בין שכבת התצוגה לכל השאר,
כאשר ה UI זו השכבה הראשונה, וה Business Layer זו השכבה השנייה,
הכוללת בתוכה גם עבדה ישירה מול בסיס הנתונים, כאשר אמור להיות Facade ו API ברור בין שתי השכבות.
שלוש שכבות / Three Tier
בדומה לתפיסה הקודמת, אך עם פיצול של ה Bunisess Layer לשתי שכבות,
הראשונה שאחראית באמת על הלוגיקה העסקית, והשניה (DAL) האחראית על כל העבודה מול בסיס הנתונים,
כאשר כעת יש את שכבת התצוגה/UI שאחראית על חווית המשתמש,
השניה אחראית על הלוגיקה העסקית והשלישית אחראית על העבודה מול בסיס הנתונים,
כאשר כל שכבה חושפת את הפונקציונאליות הרלוונטית לשכבה שמעליה (בלבד), בשאיפה עם Coupling מינימלי ככל האפשר.
ריבוי שכבות / N-Tier / Multitier
בדומה לתפיסה הקודמת, כאשר כל שכבה יכולה להתפצל למספר שכבות משנה, לדוגמא:
שכבת ה UI תתפצל לשכבה שאחראית על ה UI והתצוגה נטו, ושכבת Controllers (או כל שם אחר, לא בהכרח רלוונטי ל MVC),
שאחראית על הלוגיקה הרלוונטית ל UI נטו (לדוגמא, אכיפת שדות חובה, לוגיקה המסייעת לחווית משתמש, ולידציות וכו')
דוגמא אחרת היא פיצול ה BL לשתי שכבות, שכבת Workflow האחראית על ניהול תהליך לוגי מסויים,
ושכבת BL האחריות על מימוש לוגיקה ספציפית (פונקציות אטומיות), כאשר ה WF אחראי לקרוא ל BL לפי הסדר ולנהל את התהליך הלוגי העסקי,
וכמובן גם את שכבר ה DAL אפשר לפרק לשכבה האחראית על עבודה נטו מול בסיס הנתונים (עם/ללא ORM),
ושכבה האחראית על קריאת לשכבת ה ORM וביצוע עיבוד בסיסי על התוצאות לפני החזרת התשובה ל BC וממנו כלפי מעלה.
מספר שאלות הבהרה:
1. האם בגדול התאור נכון, או שיש אי דיוקים מהותיים? אודה לכל הערה/הארה.
2. האם כאשר מדברים על שתי שכבות, מקובל להחיל את ה UI + לוגיקה כשכבה אחת, ואת בסיס הנתונים כשכבה השנייה,
או את ה UI כשכבה אחת, ולוגיקה + בסיס הנתונים כשכבה השנייה? (או שגם וגם מקובל, העיקר שיש סלט וספגטי
)
3. האם נכון לומר שארכיטקטורת שלוש השכבות היא הבסיס להמשך, מכיוון שגם בריבוי שכבות,
הרציונל הבסיסי הוא שכבת פרזנטציה (UI), שכבת לוגיקה עסקית (BL) ושכבת בסיס נתונים (DAL), קרי - שלוש שכבות,
ופשוט פיצלו חלק מהשכבות (כמו הדוגמאות שציינתי), ולכן קיבלנו יותר משלוש שכבות?
תודה.
רק לוודא שזכרוני אינו מטעני בנוגע לשכבות בהקשר של פיתוח מערכת,
להלן תיאור קצת ולא מדוייק מזכרוני, ובסוף מספר שאלות הבהרה:
שכבה אחת
לא היתה באמת הגדרה לנושא, אבל מדובר במערכות Stand Alone לפני מספר עשורים,
פשוט מערכת שבה יש UI שבתוכו כתובה גם כל הלוגיקה, הכל כמקשה אחת.
שתי שכבות / Two Tier
הפרדה ל UI ול Business Layer,
מפסיקים לכתוב קוד ספגטי הכולל מימוש לוגיקה בצד ה UI ופניות ישירות לבסיס הנתונים,
אלא מממשים הפרדה בסיסית בין שכבת התצוגה לכל השאר,
כאשר ה UI זו השכבה הראשונה, וה Business Layer זו השכבה השנייה,
הכוללת בתוכה גם עבדה ישירה מול בסיס הנתונים, כאשר אמור להיות Facade ו API ברור בין שתי השכבות.
שלוש שכבות / Three Tier
בדומה לתפיסה הקודמת, אך עם פיצול של ה Bunisess Layer לשתי שכבות,
הראשונה שאחראית באמת על הלוגיקה העסקית, והשניה (DAL) האחראית על כל העבודה מול בסיס הנתונים,
כאשר כעת יש את שכבת התצוגה/UI שאחראית על חווית המשתמש,
השניה אחראית על הלוגיקה העסקית והשלישית אחראית על העבודה מול בסיס הנתונים,
כאשר כל שכבה חושפת את הפונקציונאליות הרלוונטית לשכבה שמעליה (בלבד), בשאיפה עם Coupling מינימלי ככל האפשר.
ריבוי שכבות / N-Tier / Multitier
בדומה לתפיסה הקודמת, כאשר כל שכבה יכולה להתפצל למספר שכבות משנה, לדוגמא:
שכבת ה UI תתפצל לשכבה שאחראית על ה UI והתצוגה נטו, ושכבת Controllers (או כל שם אחר, לא בהכרח רלוונטי ל MVC),
שאחראית על הלוגיקה הרלוונטית ל UI נטו (לדוגמא, אכיפת שדות חובה, לוגיקה המסייעת לחווית משתמש, ולידציות וכו')
דוגמא אחרת היא פיצול ה BL לשתי שכבות, שכבת Workflow האחראית על ניהול תהליך לוגי מסויים,
ושכבת BL האחריות על מימוש לוגיקה ספציפית (פונקציות אטומיות), כאשר ה WF אחראי לקרוא ל BL לפי הסדר ולנהל את התהליך הלוגי העסקי,
וכמובן גם את שכבר ה DAL אפשר לפרק לשכבה האחראית על עבודה נטו מול בסיס הנתונים (עם/ללא ORM),
ושכבה האחראית על קריאת לשכבת ה ORM וביצוע עיבוד בסיסי על התוצאות לפני החזרת התשובה ל BC וממנו כלפי מעלה.
מספר שאלות הבהרה:
1. האם בגדול התאור נכון, או שיש אי דיוקים מהותיים? אודה לכל הערה/הארה.
2. האם כאשר מדברים על שתי שכבות, מקובל להחיל את ה UI + לוגיקה כשכבה אחת, ואת בסיס הנתונים כשכבה השנייה,
או את ה UI כשכבה אחת, ולוגיקה + בסיס הנתונים כשכבה השנייה? (או שגם וגם מקובל, העיקר שיש סלט וספגטי
3. האם נכון לומר שארכיטקטורת שלוש השכבות היא הבסיס להמשך, מכיוון שגם בריבוי שכבות,
הרציונל הבסיסי הוא שכבת פרזנטציה (UI), שכבת לוגיקה עסקית (BL) ושכבת בסיס נתונים (DAL), קרי - שלוש שכבות,
ופשוט פיצלו חלק מהשכבות (כמו הדוגמאות שציינתי), ולכן קיבלנו יותר משלוש שכבות?
תודה.