מהי שיעור POJO?

1. סקירה כללית

במדריך הקצר הזה, נחקור את ההגדרה "אובייקט Java ישן רגיל" או בקיצור POJO.

נבדוק כיצד POJO בהשוואה ל- JavaBean וכיצד יכול להיות מועיל להפוך את ה- POJO שלנו ל- JavaBeans.

2. רגיל Java אובייקטים ישנים

2.1. מה זה POJO?

כשאנחנו מדברים על POJO, מה שאנחנו מתארים הוא סוג פשוט ללא התייחסויות למסגרות מסוימות. ל- POJO אין אמנת שמות עבור המאפיינים והשיטות שלנו.

בואו ניצור עובד בסיסי POJO. יהיו לו שלושה מאפיינים; שם פרטי, שם משפחה ותאריך התחלה:

מחלקה ציבורית EmployeePojo {public string string name; שם משפחה ציבורי; פרטי LocalDate startDate; EmployeePojo ציבורי (שם מחרוזת, שם משפחה מחרוזת, תאריך התחלה של LocalDate) {this.firstName = firstName; this.lastName = lastname; this.startDate = startDate; } שם מחרוזת ציבורי () {להחזיר this.firstName + "" + this.lastName; } ציבורי LocalDate getStart () {להחזיר this.startDate; }}

מחלקה זו יכולה לשמש את כל תוכנות Java מכיוון שהיא אינה קשורה לשום מסגרת.

אבל אנחנו לא עוקבים אחר שום אמנה אמיתית לבנייה, גישה או שינוי של מצב הכיתה.

היעדר כינוס זה גורם לשתי בעיות:

ראשית, היא מגדילה את עקומת הלמידה עבור קודנים המנסים להבין כיצד להשתמש בה.

שְׁנִיָה, זה עשוי להגביל את יכולת המסגרת להעדיף מוסכמות על פני תצורה, להבין כיצד להשתמש בכיתה ולהגדיל את הפונקציונליות שלה.

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

2.2. השתקפות עם POJO

בואו נוסיף את נחושת-בוטנים תלות לפרויקט שלנו:

 commons-beanutils commons-beanutils 1.9.4 

ועכשיו, בואו נבדוק את המאפיינים של ה- POJO שלנו:

רשימה propertyNames = PropertyUtils.getPropertyDescriptors (EmployeePojo.class) .stream () .map (PropertyDescriptor :: getDisplayName) .collect (Collectors.toList ());

אם היינו מדפיסים propertyNames למסוף היינו רואים רק:

[הַתחָלָה] 

הנה, אנו רואים שאנחנו רק מקבלים הַתחָלָה כרכוש של הכיתה. PropertyUtils לא הצליח למצוא את השניים האחרים.

היינו רואים את אותה סוג של תוצאות אם היינו משתמשים בספריות אחרות כמו ג'קסון לעיבוד עובד פויגו.

באופן אידיאלי, נראה את כל הנכסים שלנו: שם פרטי, שם משפחה, ו תאריך התחלה. והחדשות הטובות הן שספריות ג'אווה רבות תומכות כברירת מחדל במשהו שנקרא מוסכמת שמות JavaBean.

3. JavaBeans

3.1. מה זה JavaBean?

JavaBean הוא עדיין POJO אך מציג סט כללים קפדני סביב אופן היישום שלנו:

  • רמות גישה - הנכסים שלנו פרטיים ואנחנו חושפים את הגטרים והסדרים
  • שמות שיטות - המחברים והמגדירים שלנו עוקבים אחר getX ו setX אמנה (במקרה של בוליאני, isX יכול לשמש לגטר)
  • קונסטרוקטור ברירת מחדל - בנאי ללא ארגומנטים חייב להיות נוכח כך שניתן ליצור מופע מבלי לספק ארגומנטים, למשל במהלך עריכת ערעור
  • ניתן לבצע סדרתי - ליישם את ניתן לבצע סדרתי ממשק מאפשר לנו לאחסן את המדינה

3.2. עובד פויגו כ- JavaBean

אז בואו ננסה להמיר עובד פויגו לתוך JavaBean:

מחלקה ציבורית EmployeeBean מיישמת Serializable {פרטית סטטית פרטית סופית ארוכה serialVersionUID = -3760445487636086034L; פרטי מחרוזת firstName; שם משפחה פרטי מחרוזת; פרטי LocalDate startDate; Public EmployeeBean () {} public EmployeeBean (שם מחרוזת, שם משפחה מחרוזת, תאריך התחלה של תאריך) {this.firstName = שם פרטי; this.lastName = lastname; this.startDate = startDate; } מחרוזת ציבורית getFirstName () {return firstName; } ריק ריק setFirstName (שם מחרוזת) {this.firstName = שם פרטי; } // גטרים / סטרים נוספים}

3.3. השתקפות עם JavaBean

כאשר אנו בודקים את השעועית שלנו עם השתקפות, כעת אנו מקבלים את הרשימה המלאה של המאפיינים:

[שם פרטי, שם משפחה, התחלה תאריך]

4. פשרות בין השימוש ב- JavaBeans

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

כאשר אנו משתמשים ב- JavaBeans עלינו לזכור כמה חסרונות פוטנציאליים:

  • מוטציה - JavaBeans שלנו ניתנים לשינוי בשל שיטות הקביעה שלהם - זה יכול להוביל לבעיות מקבילות או עקביות
  • פלטת דוד - עלינו להציג גטררים עבור כל הנכסים והמגדירים עבור רובם, הרבה מזה עשוי להיות מיותר
  • בונה אפס טיעונים - לעיתים קרובות אנו זקוקים לוויכוחים בבונים שלנו כדי להבטיח שהאובייקט ייווצר במצב תקף, אך תקן JavaBean מחייב אותנו לספק בונה אפס טיעונים

לאור פשרות אלה, המסגרות הותאמו גם למוסכמות שעועית אחרות לאורך השנים.

5. מסקנה

במדריך זה השווינו POJOs עם JavaBeans.

ראשית, למדנו ש- POJO הוא אובייקט Java שאינו חייב שום מסגרת ספציפית, וש- JavaBean הוא סוג מיוחד של POJO עם מערכת מוסכמות קפדנית.

ואז ראינו כמה מסגרות וספריות רותמות את מוסכמת השמות JavaBean כדי לגלות את המאפיינים של הכיתה.

כרגיל, הדוגמאות זמינות ב- GitHub.