כלי ORM

כלי ORM

מתי אתם מחליטים שיש צורך בכלי ORM ? אשמח אם גם תגיבו לסביבת הוואב (אתרים, ומערכות אינטראנט).
 

guznik

New member
כשאתה יודע להצביע על מודל נתונים

אם בשכבת האפליקציה יש לך ממש מודל אובייקטים (אולי זה יפתיע אותך, אבל יש טיפוסים שמשום מה כותבים בשפה מונחית עצמים אבל לא מיישמים את העקרונות האלה בישום מודל הנתונים), והיא מבצעת פעולות CRUD, יתאים שימוש ב-ORM (בניגוד למערכת שמפיקה דו"חות, שעבורה עדיף להשתמש בכלי דו"חות). באופן כללי אני מעדיף שהטכנולוגיה שאני בוחר לשימוש מסויים לא תהיה מצומדת לשום טכנולוגיה אחרת, למשל Web Application container, ולכן אני אבחר במקרה כזה כלי ORM שיעמוד בפני עצמו וכך יוכל לעבוד גם באפליקציות שולחניות וגם באפליקציות Web-יות. יש אנשים שדווקא מעדיפים לדחוף הכל ל-Container. אין הבדל ממשי באופן השימוש או הביצועים בין שתי האפשרויות אם אתה יודע איך להשתמש ולקנפג אותן, פשוט אם תרצה להחליף Container זה יהיה יותר סיפור. אם אתה מחפש כלי ORM עבור Java, אני ממליץ על Hibernate. הוא מאוד חזק, Open Source, ויש לו פופולאריות אדירה ובהתאם לכך המון ספרות מודפסת ובאינטרנט, וגם הרבה plugins ל-Eclipse אם אתה משתמש בו.
 
מה הכוונה מודל אובייקטים?

תודה
 

guznik

New member
מודל נתונים שמייצג את המציאות

אני אתחיל עם דוגמא של חוסר מודל נתונים. ניקח את הדוגמא הקלאסית של עובדים ומחלקות. נניח שאתה רוצה לשלוף את שמות כל העובדים במחלקה X. קוד התוכנית שלך יבצע שליפה של מחלקה ע"פ השם X וכך ימצא את המפתח של הרשומה. אחר כך תהיה שליפה נוספת של כל השמות מרשומות העובדים שמפתח המחלקה שלהן זהה למפתח שמצאנו קודם. שמת לב באיזה מושגים השתמשנו כאן? רשומות, מפתחות, שליפה לפי ערך, השוואת מפתחות... אלה מושגים מעולם בסיסי הנתונים, ולא מהעולם האמיתי. מודל נתונים אומר שיש לך מחלקת "עובד" ומחלקת "מחלקה", ואתה יוצר אובייקטים שלהם. במקרה כזה מחלקת "מחלקה" הייתה מכילה מערך של אובייקטי "עובד". אתה רואה את ההבדל? כאן אנחנו אומרים "העובדים האלה מוכלים בתוך מחלקה X", ולא "לעובדים האלה יש מפתח מחלקה הזהה למפתח של מחלקה X". התפקיד של ORM הוא לקחת את מודל הנתונים שלך ולמפות אותו לטבלאות ולפקודות ה-SQL שבאמן מתרחשות מאחורי הקלעים. היתרון של זה הוא שתוכניתן האפליקציה לא צריך לחשוב במושגים מעולם בסיסי הנתונים - מבחינתו הוא עובד עם אובייקטים שמייצגים דברים בעולם האמיתי. ככל שהמערכת שלך יותר גדולה, יותר קל לראות כמה ORM מפשט לך את הקוד לעומת שימוש ישיר ב-SQL.
 
תודה רבה ../images/Emo13.gif

עכשיו השאלה הנשאלת היא עד כמה יעיל שימוש בכלי ORM בתוך סביבת אינטרנט? נגיד אני משתמש ב-PHP, עד כמה יעיל (זמן פירסור וכו') יהיה שימוש בORM באפליקציות PHP ? לגבי JSP/Servlets לפי איך שאני מבין זה יכול להשפיע רק על זמן הטעינה של התוכנית שזה בעצם קורה רק לעתים רחוקות.
 

guznik

New member
אני לא מכיר כלי ORM עבור PHP

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

justme5

New member
כלומר זו עוד שכבה, מעל ל JDBC?

והערך המוסף שלה הוא ההפשטה של הקוד, על חשבון הביצועים?
 

guznik

New member
כן, אבל לא כזאת פגיעה בביצועים

סמוך על כלים טובים כמו Hibernate & TopLink שיעבדו טוב עם מינימום פגיעה בביצועים. יש בכלים האלה Catching ברמת האפליקציה ויש להם הגדרות ב"מ למי שלא רוצה להתעסק עם זה. המסה העיקרית של העבודה נעשית בעליה של האפליקציה, שבה נטענים כל המיפויים בין מודל האובייקטים לבין הטבלאות והשדות. אחרי זה אם אתה מנהל נכון Catching ברמת האפליקציה וברמת בסיס התנונים לא צריכות להיות לך בעיות ביצועים.
 
למעלה