210 likes | 320 Views
Lab-Admin Business Logic. אלעד וייס מירון הורודי. ראשי פרקים. רקע – מצב קיים. מטרות הפרויקט. תהליך התכנון – רעיונות לפתרונות שונים. סקירת התכן. הצגת יכולות – כולל יכולות חדשות. רקע. מערכת Lab-Admin הקיימת מבוססת ממשק משתמש הפועל ישירות מול מסד הנתונים.
E N D
Lab-AdminBusiness Logic אלעד וייס מירון הורודי
ראשי פרקים • רקע – מצב קיים. • מטרות הפרויקט. • תהליך התכנון – רעיונות לפתרונות שונים. • סקירת התכן. • הצגת יכולות – כולל יכולות חדשות
רקע • מערכת Lab-Admin הקיימת מבוססת ממשק משתמש הפועל ישירות מול מסד הנתונים. • היקף המערכת גדול: איתור תקלות מסורבל ומחייב חיפוש בכמות רבה של קוד. • שאילתות SQL בתוך קוד הממשק: מבנה מסד הנתונים חשוף למתכנת הממשק. Database GUI
SP BusinessLogic מטרות הפרויקט • הוספת מערך מחלקות חדש למערכת Lab Admin שיספק את המטרות הבאות: • הוצאת הגישה למסד הנתונים מממשק המשתמש. • מודולאריות – קוד מסודר המפשט פעולות אחזקה ושדרוג. • גישה למסד נתונים רק באמצעות Stored Procedures –הסתרה של מבנה מסד הנתונים ממתכנת הממשק. Database GUI
אופי האובייקטים • רעיון א': יצירת אובייקטים דומים במבנה לדפי הממשק השונים. • יתרון: • כל הפרטים למילוי דף ממשק באובייקט יחיד. • חיסרון: • הבאת נתונים ממסד הנתונים מסורבלת וגורמת: • חוסר גמישות בשליטה על המידע הנלקח. שינוי ממשק בעייתי. • שאילתות ארוכות ומסורבלות. איתור תקלות קשה.
אופי האובייקטים (המשך) • רעיון ב': יצירת אובייקט עבור כל טבלת מסד נתונים אשר יש לה תפקיד במילוי מידע בממשק. • יתרון: • מודולאריות רבה. ניתן להרכיב את המידע עבור דף ממשק מתוך מגוון רחב של אובייקטים. • חסרונות: • המון אובייקטים אשר לחלקם תפקיד זניח במערכת. • יותר מדי גישות למסד הנתונים.
אופי האובייקטים (המשך) • הרעיון הנבחר: יצירת אובייקטים בעלי משמעות בעולם של מסד הנתונים (לפעמים מיותר מטבלה אחת), אשר ניתן להרכיב מהם תצורות שונות לפי צרכי הממשק (מעיין לגו). בנוסף, השליטה על פתיחת/סגירת קשר למסד הנתונים הועברה לממשק. • יתרונות: • מודולאריות מלאה, הבאת כל המידע שצריך ורק אותו. • פתיחת קשר למסד הנתונים וסגירתו רק לאחר ביצוע כל הפעולות. • חסרונות: • הממשק אחראי על פתיחת/סגירת קשר – הוספת אחריות.
תפעול האובייקטים • רעיון א': לכל אובייקט יהיה אוסף קבוע של מתודות שכולל מתודת טעינה, מתודת שמירה ומתודת מחיקה. • יתרון: • כל הפעולות הקשורות לאובייקט הן במקום אחד. • חסרונות: • פעולות בעלות אופי פעולה דומה מפוזרות בין הרבה אובייקטים שונים.
תפעול האובייקטים (המשך) • רעיון הנבחר: איגוד כל מתודות התפעול לאובייקטי תפעול. כל מתודות הטעינה באובייקט אחד, מתודות השמירה באובייקט אחר, וכן הלאה. • יתרונות: • הפרדה ברורה בין אובייקטים שתפקידם להחזיק מידע לבין אובייקטים המתפעלים את הקשר בינם לבין מסד הנתונים. • ריכוז כל הפעולות מאותו אופי במקום אחד. נוחות באחזקה. • כל היתרונות הנובעים מתכנון שהוא Aspect Oriented. • חסרונות: • סרבול מסוים בהוספת אובייקט חדש. נדרש עדכון של מספר אובייקטים.
מחלקות ה-Business Logic • ניתן לחלק את מחלקות ה-Business Logic לשלושה סוגים עיקריים: • אובייקטים בדידים (Objects) – כל אובייקט מייצג ישות/תת-ישות נפרדת כגון סטודנט, מעבדה, הרשמה... • קבוצות (Collections) – מחלקות המאגדות בתוכן אובייקטים רבים מאותו סוג, ומאפשרות בין השאר מילוי נוח של אובייקטי ממשק המציגים רשימות. • אובייקטי תפעול (BL) – אובייקטים אלה מאפשרים לכותב הממשק לבצע פעולות שונות על האובייקטים הנ"ל, כגון טעינת שדות, עדכון שדות במסד הנתונים וכדומה.
אובייקטים בדידים (Objects) • Project • ProjectProposal • ProjectStatus • ProjectType • Registration • Season • Semester • StudentStatus • Supervisor • EmployeeType • Faculty • FinalCheckListItem • Kdam • LAProjectDisplay • LAStudentDisplay • LAStudentReport • LASupervisorDisplay • LASupervisorReport • Lab • LabStudent • Person קידומת LA משמעותה LabAdmin, כלומר זהו אובייקט שמטרתו היחידה היא להציג מידע כללי במערכת LabAdmin, בדרך-כלל ייכנס לתוך Collection ויוצג בתוך datagrid או drop-down-list.
קבוצות אובייקטים (Collections) • ProjectStatusCollection • ProjectTypeCollection • RegistrationCollection • SemesterCollection • EmployeeTypeCollection • FacultyCollection • FinalCheckListCollection • KdamCollection • LabCollection • LAProjectDisplayCollection • LAStudentDisplayCollection • LAStudentReportCollection • LASupervisorDisplayCollection • LASupervisorReportCollection
אובייקטי תפעול • BL – Base class for all Objects classes • BLCollection – Base class for all collections • BLCommonProcedures • DB • DBLoader • DBSaver • DBDeleter
דוגמת מילוי ממשק private void bSearch_Click(object sender, System.EventArgs e) { LoadDataGrid(); dgRegistrations.SelectedIndex = -1; } • טבלת סטודנטים private void LoadDataGrid() { dgRegistrations.CurrentPageIndex = currentPageIndex; LAStudentDisplayCollection collection = new LAStudentDisplayCollection(this.ddlLab.SelectedValue, this.ddlSearchCriteria.SelectedValue, this.tbSearchValue.Text ); DB.OpenConnection(); DB.Loader.Load(collection); DB.CloseConnection(); collection.sort(eDirection.d_Increasing, this.ddlSortCriteria.SelectedValue); dgRegistrations.DataSource = collection; dgRegistrations.DataBind(); }
דוגמת מילוי ממשק • דף סטודנט – הדף מייצג הרשמת סטודנט בסמסטר. שלב א' : טעינת המידע ממסד הנתונים לאובייקטים …. Registration registration = new Registration(tbRegistrationID.Text); DB.OpenConnection(); DB.Loader.Load(registration); DB.Loader.Load(registration.Student); DB.Loader.Load(registration.Student.Kdams); DB.Loader.Load(registration.Student.Faculty); DB.Loader.Load(registration.Semester); DB.Loader.Load(registration.ProjectType); DB.Loader.Load(registration.Lab); DB.Loader.Load(registration.Lab.Kdams); DB.Loader.Load(registration.Status); DB.CloseConnection(); בדוגמה זו תשעה אובייקטים שונים נטענו ממסד הנתונים באמצעות ה-DB.Loader, ויוצרים יחדיו את מכלול המידע הנחוץ לממשק.
שלב ב' : הצגת המידע מהאובייקטים בממשק המשתמש ddlSFaculty.SelectedValue = registration.Student.Faculty.Number; … tbSFirstNameHeb.Text = registration.Student.FirstNameHeb; tbSLastNameHeb.Text = registration.Student.LastNameHeb; tbSLoginRequest.Text = registration.Studenta.LoginRequest; tbSAcademicPoints.Text = registration.Student.AcademicPoints; tbSAddress.Text = registration.Student.Address; tbSAverage.Text = registration.Student.Average; tbSCellPhone.Text = registration.Student.CellPhone; tbSEmail.Text = registration.Student.Email; … tbGrade.Text = registration.Grade; ddlRPreference1.SelectedValue = registration.Request1; ddlRPreference2.SelectedValue = registration.Request2; ddlRPreference3.SelectedValue = registration.Request3; … foreach(Kdam k in registration.Student.Kdams) { ListItem item = lbKdams.Items.FindByValue(k.Number); if (item != null) lbKdams.Items[lbKdams.Items.IndexOf(item)].Selected = true; }
2 4 9 1 3 8 6 7 5 Project החלקים שטענו
הצגת יכולות • הפרויקט מוגש עם כלי להערכת ביצועים הכולל ממשק משתמש צבעוני, נוח וקל לתפעול המספק את כל הפונקציונאליות של מערכת Lab Admin הקיימת, וקצת יותר...
יכולות חדשות • תיקון תעודת זהות של מנחה. • תיקון תעודת זהות של סטודנט. • מיון טבלאות לפי סמסטרים בסדר כרונולוגי (לא לקסיקוגרפי). • בחירת כל קורס טכניוני כקדם* לביצוע פרויקט במעבדה. • אפשרות הצלבה בין קדמים נדרשים לקורסים שביצע סטודנט*. • הרכבת מערך אובייקטים וטעינתם ללא הכרות עם מסד הנתונים. * מתאפשר בזכות תמיכת מסד נתונים אודות לרמי ורומן.