-->
קודם כל, כמו אנשים רבים בתחום, אני אוהב להפריד את המונח OOP (בהקשר של פיתוח OO טהור) מהמונח "שכבות" כי הם לא הולכים טוב ביחד (ויש פה מספיק ויכוחים בפורום שיוכיחו לך את זה). ועכשיו לנושא השכבות - אני אתאר בקצרה את השכבות שאני הגדרתי אצלנו במערכת (מערכת מידע בינונית עד גדולה מבוססת asp.net): DAL שכבת הגישה לנתונים, כשמה כן היא - ניגשת לנתונים. לא משנה אם הנתונים ב-DB, ב-WS או באיזשהו קובץ בדיסק (או אולי במערכת אחרת שאינה קשורה אלי). השכבה מחולקת למחלקות המייצגות את ישויות המידע של המערכת ובכל מחלקה כזו יש את המתודות המתאימות לאחזור ועדכון המידע. לאחר שהשכבה מקבלת את המידע ממקור חיצוני היא מתרגמת אותו למבנה נתונים של המערכת ומחזירה את מבנה הנתונים המתאים לשכבה שקראה לה (ב-99%, שכבת ה-BL). את הגישה למסדי נתונים אני מבצע באמצעות רכיב תשתיתי שמדבר עם ה-DB (רכיב זה גם מנהל בתוכו את המלל של השליפות, כך שכל מה שאני צריך זה לומר לו "תריץ לי את שליפה 1234". MODEL הזכרתי מקודם את מבני הנתונים של ישויות המידע - שכבה זו מכילה את ההגדרות שלהם. במקרה שלי, כרגע ישויות המידע מיוצגות ע"י Typed DS, אך אין מניע שהן יוגדרו בכל צורה שנוחה לך (struct, class ...) מבני הנתונים שקיימים בשכבה זו נוצרים לראשונה ב-DAL, מוחזרים ל-BL ועוברים החוצה דרך כל השכבות - בשלב האחזור. ובשלב העדכון - מחלחלים מטה עד ה-DAL. BL השכבה שאחראית על הלוגיקה של המערכת. בין השאר - בדיקות תקינות של נתונים שנשלחים לשמירה, בדיקת הרשאות כאשר משתמש מבקש לאחזר מידע וכו' BP קיצור של Business Process. אני אישית קורא לשכבה הזו אצלי Service, אני מכיר פרויקטים שקוראים לזה WF או Facade. הרעיון - שכבה שאחראית על האינטגרציה בין ישויות המידע (לדוגמה - ביצוע פעולה מורכבת במערכת אשר דורשת עדכון של מספר ישויות). ברמה הזו גם לרוב מנהלים את הטרנזקציה של ה-DB (כי כאשר באים לעדכן כמה ישויות מידע, צריך אפשרות לבטל את פעולת העדכון אם משהו לא טוב קורה באמצע). במקרה שלי, מאחר ואני עובד בגישת SOA ו-WS, שכבה זו נחשפת לעולם ע"י WS. UI המנגנון המשחק בשכבה זו הוא מנגנון ה-MVC (או ליתר דיוק ה-DP של MVC): Model - מבנה הנתונים שהדף מחזיק (לרוב, מבנה הנתונים שמגיע מה-WS View - דף ה-ASPX שאחראי על הצגת הנתונים (grid, שדות ...) Controller - ה-CodeBehind של הדף שאחראי על הקישור בין המודל למסך, על בדיקות התקינות המקומיות לפני שהפרטים נשלחים לשרת, התרגום של ערכי קוד לערכים נוחים למשתמש (1=זכר, 2=נקבה ...) וכו'. מקווה שזה מספק לבינתיים