שכבות עבודה ב-OOP

שכבות עבודה ב-OOP

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

ייוניי

New member
דעתי על שכבות ועבודה ב-OOP

בעולם ה OOP שכבות אבסטרקציה הן השיטה המרכזית לשימוש חוזר בקוד ולהפרדת לוגיקה המאפשרת הקלה משמעותית בתחזוקה. קח את ה DAL למשל, למה בכלל להפריד את הגישה לבסיס הנתונים משאר המערכת? למה לא פשוט לכתוב קוד שניגש ל DBMS בכל פעם שצריך ועושה את העבודה? יש שיאמרו ש DAL מאפשרת לך לשנות את תוכנת ה DBMS מתי שתרצה בלי שהדבר ישפיע על שאר המערכת - והם צודקים. אם כל תהליכי הגישה ל DBMS נעשים דרך ממשק (interface) צר שניתן ליישם עבור DBMS-ים שונים בקלות המעבר יהיה קל. אבל מה אם אין שום דרישה לתמיכה במספר DBMS-ים, האם בכל זאת לעשות שימוש ב DAL? התשובה היא - כן. שכבת אבסטרקציה דורשת ממך לעצב את הקוד כך שכל המחלקות האחראיות על גישה ל DBMS נפרדות משאר המערכת וניתן לתחזק אותן בקלות יחסית מבלי לגרום נזק, כלומר - פחות באגים. מכיוון אחר, הריכוזיות של הקוד בשכבת ה DAL חוסכת לך כתיבת קוד כפולה בשאר המערכת. פתיחה וסגירה של Connection-ים, הרצת שאילתות, עדכונים ובדיקות תקינות מורכבות - כל אלו ואחרים יכולים להיות מרוכזים ב DAL.
 

עידו פ

New member
-->

קודם כל, כמו אנשים רבים בתחום, אני אוהב להפריד את המונח 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=נקבה ...) וכו'. מקווה שזה מספק לבינתיים
 
תודה רבה לשניכם ../images/Emo13.gif

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

עידו פ

New member
כמה לינקים שאגרתי עם הזמן

http://weblogs.asp.net/rosherove/archive/2005/01/09/349294.aspx http://weblogs.asp.net/rosherove/archive/2004/01/18/59743.aspx http://steve.emxsoftware.com/SOA/Are+objects+with+behavior+bad+for+SOA http://udidahan.weblogs.us/archives/012770.html http://udidahan.weblogs.us/archives/012683.html http://dotavery.com/blog/category/13.aspx?Show=All http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/petshop3x.asp http://weblogs.asp.net/ngur/archive/2004/08/05/208710.aspx http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/BOAGag.asp http://msdn.microsoft.com/architecture/overview/default.aspx?pull=/library/en-us/dnbda/html/dataoutsideinside.asp http://msdn.microsoft.com/architecture/journal/default.aspx?pull=/library/en-us/dnmaj/html/greatarchitect.asp http://weblogs.asp.net/israelio/archive/2005/03/09/390148.aspx http://www.ronjacobs.com/pnplive/Default.htm אם סיימת, אני אחפש אם יש לי עוד במאגר במשרד
 
למעלה