מדוע לבחור באביב כמסגרת Java שלך?

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

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

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

2. מדוע להשתמש בכל מסגרת?

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

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

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

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

  • עזור לנו התמקדו במשימת הליבה ולא בתא הדוד קשור אליו
  • מפגיש שנים של חוכמה בצורת דפוסי עיצוב
  • עוזר לנו לעמוד בתעשייה ובסטנדרטים הרגולטוריים
  • מביא את עלות הבעלות הכוללת ליישום

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

  • מכריח אותנו לכתוב יישום באופן ספציפי
  • נקשר לגרסה ספציפית של שפה וספריות
  • מוסיף לטביעת הרגל של המשאבים של היישום

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

אני מקווה שנמצא יותר טוב לקבל החלטה זו ביחס לאביב בג'אווה בסוף מאמר זה.

3. סקירה קצרה של מערכת אקולוגית אביבית

לפני שנתחיל בהערכה האיכותית שלנו של Spring Framework, בואו נסתכל מקרוב על איך נראית המערכת האקולוגית של Spring.

האביב התחיל אי שם בשנת 2003 בתקופה בה Java Enterprise Edition התפתח במהירות ופיתוח יישום ארגוני היה מרגש אך בכל זאת מייגע!

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

3.1. מסגרת האביב

מסגרת האביב מחולקת למודולים מה שמאוד קל לבחור ולבחור בחלקים לשימוש בכל יישום:

  • ליבה: מספק תכונות ליבה כמו DI (הזרקת תלות), בינאום, אימות ו- AOP (תכנות מונחה-היבט)
  • גישה לנתונים: תומך בגישה לנתונים דרך JTA (Java Transaction API), JPA (Java Persistence API) ו- JDBC (Java Database Connectivity)
  • אינטרנט: תומך הן ב- Servlet API (Spring MVC) והן ב- API המגיב לאחרונה (Spring WebFlux), ובנוסף תומך ב- WebSockets, STOMP ו- WebClient
  • אינטגרציה: תומך באינטגרציה ל- Java Enterprise באמצעות JMS (Java Message Service), JMX (Java Management Extension) ו- RMI (Remote Method Invocation)
  • בדיקות: תמיכה רחבה בבדיקות יחידות ואינטגרציה באמצעות אובייקטים מדומים, מכשירי בדיקה, ניהול הקשר וקובץ אחסון במטמון

3.2. פרויקטים של אביב

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

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

  • Boot: מספק לנו סט תבניות דעתניות מאוד אך ניתנות להרחבה ליצירת פרויקטים שונים המבוססים על אביב כמעט תוך זמן קצר. זה מקל מאוד על יצירת יישומי אביב עצמאיים עם Tomcat מוטבע או מיכל דומה.
  • ענן: מספק תמיכה לפיתוח קל של חלק מתבניות המערכת הנפוצות המבוזרות כמו גילוי שירות, מפסק ושער API. זה עוזר לנו לצמצם את המאמץ לפרוס דפוסי כיריים כאלה בפלטפורמות מקומיות, מרוחקות או אפילו מנוהלות.
  • אבטחה: מספק מנגנון חזק לפיתוח אימות והרשאה לפרויקטים המבוססים על אביב בצורה ניתנת להתאמה אישית. עם תמיכה הצהרתית מינימלית, אנו מקבלים הגנה מפני התקפות נפוצות כמו קיבוע הפעלה, זיכרון קליקים וזיוף בקשות בין אתרים.
  • נייד: מספק יכולות לזהות את המכשיר ולהתאים את התנהגות היישום בהתאם. בנוסף, תומך בניהול תצוגות מודע למכשירים לחוויית משתמש אופטימלית, ניהול העדפות אתר וממתג אתרים.
  • אצווה: מספק מסגרת קלה לפיתוח יישומי אצווה עבור מערכות ארגוניות כמו ארכיון נתונים. בעל תמיכה אינטואיטיבית בתזמון, הפעלה מחדש, דילוג, איסוף מדדים ורישום. בנוסף, תומך בהגדלה של עבודות בנפח גבוה באמצעות אופטימיזציה ומחיצה.

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

4. אביב בפעולה

נהוג להוסיף תוכנית שלום-עולם להבנת כל טכנולוגיה חדשה.

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

4.1. הגדרת פרויקט

נגדיר את פרויקט Spring Boot שלנו באמצעות Spring Initializr, שהוא כלי מקוון נוח לאתחול פרויקטים עם תלות נכונה. נוסיף אינטרנט, JPA, H2 ואבטחה כתלות בפרויקט כדי לקבל את הגדרת התצורה של Maven בצורה נכונה.

פרטים נוספים על bootstrapping זמינים באחד המאמרים הקודמים שלנו.

4.2. מודל תחום והתמדה

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

בואו נגדיר תחילה את עוֹבֵד כישות JPA פשוטה:

עובד בכיתה ציבורית @Entity {@Id @GeneratedValue (אסטרטגיה = GenerationType.AUTO) פרטי מזהה ארוך; @NotNull מחרוזת פרטית שם פרטי; שם משפחה פרטי מחרוזת @NotNull; // קונסטרוקטור סטנדרטי, גטרים וקובעים}

שים לב לזהות שנוצרה אוטומטית שכללנו בהגדרת היישות שלנו.

כעת עלינו להגדיר מאגר JPA עבור היישות שלנו. כאן האביב הופך את זה לפשוט באמת:

ממשק ציבורי EmployeeRepository מרחיב את CrudRepository {List findAll (); }

כל שעלינו לעשות הוא להגדיר ממשק כזה, ו- האביב של JPA יספק לנו יישום עם פירוט ברירת מחדל ופעולות מותאמות אישית. די מסודר! מצא פרטים נוספים על עבודה עם Spring Data JPA במאמרים האחרים שלנו.

4.3. בקר

כעת עלינו להגדיר בקר אינטרנט לניתוב וטיפול בבקשותינו הנכנסות:

@ RestController מחלקה ציבורית EmployeeController {@ מאגר פרטי של עובדים מאגרים פרטיים; @GetMapping ("/ עובדים") רשימה ציבורית getEmployees () {return repository.findAll (); } // מטפלי נקודות קצה אחרים ב- CRUD}

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

עבודה עם בקרי REST של אביב מכוסה בפרטים נהדרים במאמר הקודם שלנו.

4.4. בִּטָחוֹן

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

אביב הביטחון באמת זורח באזור זה:

המחלקה הציבורית @EnableWebSecurity WebSecurityConfig מרחיב את WebSecurityConfigurerAdapter {@Override מוגן ריק להגדיר (HttpSecurity http) זורק חריג {http .authorizeRequests () .antMatchers (HttpMethod.GET, "/ עובדים", "/ עובדים / **") .permitA. anyRequest (). מאומת () .and () .httpBasic (); } // שעועית והגדרות נחוצות אחרות}

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

4.5. בדיקה

עכשיו עשינו הכל, אבל רגע, איך נבדוק את זה?

בואו נראה אם ​​אביב יכול להקל על כתיבת בדיקות יחידה לבקרי REST:

@RunWith (SpringRunner.class) @SpringBootTest (webEnvironment = WebEnvironment.RANDOM_PORT) @ AutoConfigureMockMvc מחלקה ציבורית EmployeeControllerTests {@ MowMvc mvc פרטית אוטומטית; @Test @WithMockUser () חלל ציבורי givenNoEmployee_whenCreateEmployee_thenEmployeeCreated () זורק חריג {mvc.perform (פוסט ("/ עובדים"). תוכן (ObjectMapper חדש (). WriteValueAsString (עובד חדש ("ראשון", "אחרון")) עם. csrf ())) .contentType (MediaType.APPLICATION_JSON). accept (MediaType.APPLICATION_JSON)). andExpect (MockMvcResultMatchers.status () .isCreated ()). andExpect (jsonPath ("$. firstName", is ("First") andExpect (jsonPath ("$. lastName", הוא ("אחרון"))); } // בדיקות אחרות לפי הצורך}

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

4.6. הפעלת האפליקציה

לסיום, כיצד נפעיל את היישום הזה? זה היבט מעניין נוסף של Spring Boot. למרות שאנחנו יכולים לארוז את זה כיישום רגיל ולפרוס באופן מסורתי על מיכל Servlet.

אבל איפה זה כיף זה! Spring Boot מגיע עם שרת Tomcat מוטבע:

@SpringBootApplication מחלקה ציבורית יישום {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}

זהו מחלקה שנוצרה מראש כחלק מ- bootstrap ויש בה את כל הפרטים הדרושים להפעלת יישום זה באמצעות השרת המוטמע.

יתר על כן, זה ניתן להתאמה אישית רבה.

5. אלטרנטיבות לאביב

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

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

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

  • הנחיות: מציע מיכל IoC חזק עבור יישומי Java
  • הפעל: משתלב באופן די מתאים כמסגרת אינטרנט עם תמיכה תגובתית
  • מצב שינה: מסגרת מבוססת לגישה לנתונים עם תמיכה ב- JPA

מלבד אלה יש כמה תוספות האחרונות שמציעות תמיכה רחבה יותר מתחום ספציפי, אך עדיין אינן מכסות את כל מה שיש לאביב להציע:

  • Micronaut: מסגרת מבוססת JVM המותאמת למיקרו-שירותים שמקורם בענן
  • קווארקוס: מחסנית Java עידנית חדשה שמבטיחה לספק זמן אתחול מהיר יותר וטביעת רגל קטנה יותר

ברור שזה לא הכרחי ולא אפשרי לחזור על הרשימה לחלוטין, אבל אנחנו מקבלים את הרעיון הרחב כאן.

6. אז, למה לבחור באביב?

לבסוף, בנינו את כל ההקשר הנדרש כדי לענות על השאלה המרכזית שלנו, מדוע אביב? אנו מבינים את הדרכים שבהן מסגרת יכולה לעזור לנו בפיתוח יישומים ארגוניים מורכבים.

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

עכשיו, היכן האביב זורח בין כל אלה? בוא נחקור.

6.1. שְׁמִישׁוּת

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

פרויקטים כמו Spring Boot הפכו את bootstrapping לפרויקט אביב מורכב לכמעט טריוויאלי. שלא לדבר על זה, יש לו תיעוד מעולה והדרכות שיעזרו לכל אחד לעלות.

6.2. מודולריות

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

יתרה מכך, יש לנו אפשרות להשתמש במסגרות אחרות כמו Hibernate או Struts גם כן!

6.3. התאמה

למרות אביב אינו תומך בכל מפרטי EE של ג'קרטה, הוא תומך בכל הטכנולוגיות שלה, לעתים קרובות לשפר את התמיכה על פני המפרט הסטנדרטי במידת הצורך. למשל, Spring תומך במאגרים מבוססי JPA ולכן הופך את זה לטריוויאלי להחליף ספק.

יתר על כן, אביב תומך במפרטים בתעשייה כמו Reactive Stream תחת Spring Reactive ו- HATEOAS תחת Spring HATEOAS.

6.4. יכולת בדיקה

אימוץ כל מסגרת תלוי במידה רבה גם בעובדה כמה קל לבדוק את היישום שנבנה על גבי זה. אביב בבסיסו תומך ותומך בפיתוח מונחה מבחן (TDD).

יישום האביב מורכב בעיקר מ- POJO שבאופן טבעי הופכת את בדיקות היחידות לפשוטות יחסית. עם זאת, Spring מספק אובייקטים מדומים לתרחישים כמו MVC שבהם בדיקות היחידות מסתבכות אחרת.

6.5 בגרות

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

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

6.6. תמיכה בקהילה

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

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

7. סיבות לֹא להשתמש באביב

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

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

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

8. מסקנה

במאמר זה דנו ביתרונות השימוש במסגרת בפיתוח אפליקציות. עוד דנו בקצרה על מסגרת האביב בפרט.

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

לבסוף, דנו בסיבות שיכולות לחייב אותנו לבחור באביב כמסגרת הבחירה עבור Java.

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

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