Top 10 Libraries ที่ Java Developer ทุกคนควรรู้จักไว้

13-พ.ย.-20

คัมภีร์เทพ IT

Java เป็นหนึ่งในภาษา Programming ที่ได้รับความนิยมอย่างมากเป็นอันดับต้น ๆ ซึ่งหนึ่งใน Features สำคัญของ Java ก็คือการมี Core Library และมี Features ต่าง ๆ ให้ใช้งานมากมาย และนี่ก็คือ Top 10 Libraries ที่ Java Developer ทุกคนควรรู้จักไว้

1. Apache Commons

Apache Commons ถือเป็นเครื่องมืออเนกประสงค์ที่มีประโยชน์ในการพัฒนา Java Software และช่วย Extend Java Core Libraries ได้เป็นจำนวนมาก หากคุณมีโอกาสได้เขียน Utility Class ใน Project ของคุณ มีโอกาสค่อนข้างสูงที่จะมี Apache Commons Library ที่ทรงพลังอยู่ในนั้นด้วย Apache Commons ประกอบด้วย 43 Modular Libraries ที่ครอบคลุมในหลายส่วน เช่น Collections, Math, Classes, Database, Caching, I/O Utils

มีการใช้งาน Apache Commons กันอย่างแพร่หลายใน Industry หากคุณกำลังทำงานอยู่ใน Project ขนาดใหญ่และคุณไม่ได้ใช้ Apache Commons Library นั่นหมายถึง คุณอาจกำลังสร้างในสิ่งที่ Java มีไว้ให้ใช้อยู่แล้ว

Features หลัก ก็คือ:

  • Java Collections Framework extension
  • Mathematics and Statistics components
  • JDBC Helper
  • Java Classes
  • I/O Utilities
  • Logging Utilities

2. Google Guava

Google Guava ถือเป็นอีกหนึ่ง Java Library ที่ใช้ประโยชน์ได้หลายอย่าง มันถูกเริ่มต้นพัฒนาโดย Google และออกแบบโดย Software Engineer ที่มีชื่อเสียงและผู้แต่งหนังสืออย่าง Joshua Bloch ปัจจุบันมันเป็น Open-Source Project ที่ Engineer จำนวนมากร่วมกันพัฒนา เช่นเดียวกับ Apache Commons มันยังคงความเป็น Modular และมี Libraries มากมาย

มันครอบคลุมทั้ง Utilities ที่จำเป็น, Collections, String Manipulation, Concurrency Utilities, Graph Libraries, I/O Utils, Hashing รวมทั้งอื่น ๆ อีกมากมาย Google Guava ถือว่าได้รับการออกแบบ Software ที่ดีกว่าเมื่อเทียบกับ Apache Commons Library หากคุณจำเป็นต้องสร้าง Shared Library หรือ Utility Class ก่อนอื่นขอแนะนำให้เข้าไปดูใน Google Guava Libraries ก่อน

Features หลัก ก็คือ:

  • Java Collections Framework Extension 
  • I/O Utilities
  • Concurrency Utilities
  • String Utilities
  • Caching
  • Hashing

3. Jackson

ในการพัฒนา Software คุณต้องประมวลผล Data ที่มี Format ต่าง ๆ คุณอาจต้อง Load หรือบันทึก Data ใน Format ต่าง ๆ หรือคุณต้อง Transfer Data ในรูปแบบต่าง ๆ ซึ่งอันที่จริงแล้ว JSON เป็น Data Exchange Format ในการพัฒนา Software สมัยใหม่ สำหรับ Data Formats ทั่วไปอื่น ๆ ได้แก่ Avro, XML, YAML, Protobuf, CSV, BSON, CBR

Jackson เป็นชุดของ Data Processing Libraries สำหรับ Java ซึ่งอันที่จริง Jackson JSON ก็คือ Streaming JSON Parser/Generator Library นอกจากนี้ยังรองรับ Data Formats อื่น ๆ เช่น Avro, BSON, CBOR, CSV, Smile, Protobuf, XML หรือ YAML และ Data Types เช่น Guava, Joda, PCollections รวมทั้งอื่น ๆ อีกมากมาย

Jackson ยังมี Data-Binding และ Annotations คุณสามารถแปลง POJO เป็น Data หรือสร้าง POJO จาก Data ด้วยความช่วยเหลือของ Jackson Annotations หากคุณทำงานกับ Data Format แล้วล่ะก็ Jackson ถือเป็น Toolset ที่ต้องมี มันมีความเป็น Modular อย่างมากกับ Core Module ที่มี Function การใช้งานพื้นฐานและ Extension Modules ต่าง ๆ

Features หลัก ก็คือ:

  • Core Modules สำหรับ Streaming, Annotations, Data-Binding และรองรับ JSON Data Format
  • Specific Modules สำหรับ Data Type Avro, CBOR, CSV, Ion, Protobuf, Smile, XML, YAML เป็นต้น
  • Kotlin Native Types
  • JSON Schema
  • Standard และ Collection Datatypes
  • รองรับ 3rd Party Data Types (Yandex Bolts, GeoJSON, Lombok, MongoDB และอื่น ๆ อีกมากมาย)

4. JAXB

ตามที่กล่าวไว้ก่อนหน้านี้ XML ถือเป็นอีก Data Format ที่พบกันได้บ่อย ซึ่งมีการตรวจสอบความถูกต้อง การจัดเก็บ และการTransfer Data ที่เข้มงวดขึ้น นับจนถึง Java 8 นั้น Java Standard Library มีการรองรับ XML รวมถึง Data Binding ด้วย ตั้งแต่ Java 9 เป็นต้นไป Function การประมวลผล XML ไม่ได้เป็นส่วนหนึ่งของ Standard Java Library อีกต่อไป และจะถูกย้ายไปยัง Library ที่แยกไปต่างหาก ซึ่งก็คือ JAXB

JAXB มีทุกสิ่งที่คุณต้องการจะใช้เพื่อทำงานกับ XML ใน Java มันมีแนวทางของการ Mapping ที่เป็นมาตรฐานและมีประสิทธิภาพระหว่าง XML กับ Java Code นอกจากนี้ยังรวมถึง Annotation-based Data Binding

Features หลัก ก็คือ:

  • รองรับ W3C XML Schema Features ทั้งหมด
  • Annotation-based Java-to-XML data binding
  • Validation

5. SLF4J

การบันทึก Log เป็นส่วนที่จำเป็นในการพัฒนา Software เพราะมันจะช่วยให้คุณเข้าใจการทำงานของ Software และค้นหาสาเหตุที่แท้จริงของ Errors ต่าง ๆ โดยเฉพาะใน Production System โดย Java Standard Library จะมีการบันทึก Log พื้นฐานใน java.util.Logging นอกจากนี้ยังมี Logging Libraries อื่น ๆ อีก เช่น Log4j, Log4j 2, Logback ซึ่งได้จัดเตรียมการบันทึก Log ขั้น Advance ใน Java ไว้ให้ ขณะที่ Logging Libraries เหล่านี้มีการ Implementation ที่เป็นรูปธรรมนั้น SLF4J ก็มี Abstraction หรือ Facade สำหรับ Logging Libraries ต่าง ๆ มันอนุญาตให้ Users สามารถเปลี่ยน Logging Libraries ที่ต้องการในระหว่างการ Deploy ได้

ในตอนแรกอาจจะดูขัดกับการใช้ Facade Library SLF4J สำหรับการบันทึก Log แต่การใช้ SLF4J จะช่วยให้คุณมีความยืดหยุ่นเป็นพิเศษในการเปลี่ยน Logging Libraries ได้อย่างง่ายดายหากจำเป็น มันเป็นความคิดที่ดีที่จะใช้ Logging Framework ที่คุณต้องการเป็น Logger ที่สามารถเชื่อมต่อกันได้กับ SLF4J

Features หลัก ก็คือ:

  • จัดเตรียม Abstraction ของ Logging Framework ที่จำเป็น
  • Logging Frameworks สามารถถูกเปลี่ยนแปลงในระหว่าง Runtime
  • รองรับ Logging Framework หลัก ๆ แทบทั้งหมด
  • Library (slf4j-ext.jar) พร้อม Tools และ Features ที่มีประโยชน์
  • มี Event Logger สำหรับการ Record Events ต่าง ๆ

6. Log4j 2

มี Logging Libraries อยู่มากมายใน Java เช่น java.util.logging, Log4j, Log4j 2, Logback และระหว่าง Libraries เหล่านั้น Log4j 2 และ Logback ถือเป็น 2 Logging Library ที่ทรงพลังที่สุด ซึ่ง Log4j 2 ดูจะได้เปรียบกว่า Logback เล็กน้อยโดยเฉพาะอย่างยิ่งใน Project ขนาดใหญ่เนื่องจากมันมีประสิทธิภาพที่ดีกว่า สำหรับ Project ขนาดใหญ่ ประสิทธิภาพของ Logging Library ถือว่ามีความสำคัญมากโดยเฉพาะอย่างยิ่งใน Asynchronous Logging, Peak Throughput, Latency

Features หลัก ก็คือ:

  • ปรับปรุงประสิทธิภาพผ่าน Asynchronous Logging
  • แยก API จากการ Implementation
  • Advanced Filtering
  • Plugin Architecture
  • รองรับ Cloud

7. Mockito

Unit/Integration Testing เป็นส่วนหนึ่งของกระบวนการพัฒนา Software บ่อยครั้งคุณต้องการ Test Single Class (SUT) แต่มันขึ้นอยู่กับ Classes ขนาดใหญ่ หรือ External Functionalities อื่น ๆ (เช่น Database Operations, I/O Operations) วิธีหนึ่งในการเขียน Unit/Integration Test ในสถานการณ์เช่นนี้ก็คือการ Mocking คุณสามารถจำลองพฤติกรรมของ External Service Calls อื่น ๆ และเน้นเฉพาะ Class ที่คุณต้องการ Test เท่านั้น

Mockito เป็น Mocking Library ที่ใช้กันอย่างแพร่หลายใน Java ไม่ว่าคุณจะ Test ใน Project ที่มีขนาดเล็กหรือใหญ่ หรือว่าจะ Enterprise Java Project ที่มีความซับซ้อน คุณก็สามารถใช้ Mockito ได้ทั้งหมด มันมี API ที่เรียบง่ายและ Clean รวมทั้งช่วยทำให้ Unit/Integration Tests ของคุณ Clean ยิ่งขึ้น

Features หลัก ก็คือ:

  • Lean และ Clean API
  • มี Stubbing Model ที่เรียบง่ายยิ่งขึ้น
  • Partial Mocking ผ่าน Spy
  • Annotation-based Mock/Spy Injection
  • Behavior-driven development syntax โดยใช้ BDDMockito

8. AssertJ

AssertJ ถือเป็นอีกหนึ่ง Library ที่เกี่ยวข้องกับ TDD หนึ่งใน Feature หลักของการ Test คือการ Verify ว่าผลการ Test ตรงกับผลลัพธ์ที่คาดหวังไว้หรือไม่ JUnit มี Built-in Assertion Mechanism ใน Class org.junit.Assert มันมี 2 วิธีสำหรับการ Verify Test แต่สำหรับ Developer มืออาชีพ วิธีการเหล่านั้นอาจยังไม่เพียงพอ

โชคดีอย่างมาก ที่มี 2 Assertion Libraries ใน Java ซึ่งก็คือ Hamcrest Matchers และ AssertJ Assertions แต่ AssertJ ดูจะมี API ที่ยอดยเยี่ยมกว่า Hamcrest นอกจากนี้มันยังมีความเป็น Modular ซึ่งมี Function การใช้งานที่จำเป็นใน Core Module และ Function การใช้งานขั้นสูงบางอย่างใน Module อื่น ๆ

Features หลัก ก็คือ:

  • Assertion API ที่ยอดเยี่ยม ซึ่งช่วยในเรื่อง Code Readability
  • เต็มไปด้วยชุดของ Assertions และ Error Messages ที่เป็นประโยชน์กับคุณ
  • Core Module สำหรับ Standard Java Library
  • Modules สำหรับการ Assertions ใน Java Libraries ยอดนิยม อย่างเช่น Guava, Joda, Neo4j
  • Modules สำหรับการ Assertions สำหรับ SQL Databases

9. Hibernate

ในชีวิตประจำวันของ Software Engineer อาจต้องทำงานกับ Data Store ซึ่งในปัจจุบันมี Data Store หลายประเภท ได้แก่ SQL และ NoSQL Data Stores ที่มีอยู่มากมาย วิธีหนึ่งในการจัดการกับ Data Store คือ การใช้ Low-Level API (เช่น JDBC สำหรับ SQL) ข้อเสียของวิธีนี้คือ มันไม่สามารถ Portable ได้ ดังนั้น วิธีที่ดีที่สุดในการจัดการกับ Data Store ก็คือ การใช้ Abstraction Layer ระหว่าง Application ของคุณกับ Data Store โดย Abstraction Layer (ORM) นี้ทำการ Map Java Class กับ Database Table/Collection นอกจากนี้ Hibernate ถือเป็นหนึ่งใน ORM Library ที่เก่าแก่ที่สุดในบรรดาภาษา Programming ทั้งหมด และถือเป็นแนวทางให้กับเทคโนโลยีที่คล้ายคลึงกันมากมายใน Industry

แม้ว่า Hibernate จะเป็นที่รู้จักกันดีในเรื่อง ORM Functionalities สำหรับ SQL Databases แต่มันก็มีการขยายไปสู่ NoSQL Databases ด้วยเช่นกัน Hibernate ยังเป็นแบบ Modular และมี Core Module รวมทั้ง Module ตาม Function การทำงานเป็นจำนวนมาก

Features หลัก ก็คือ:

  • Domain Model Persistence สำหรับ Relational Databases (ORM)
  • Domain Model Persistence สำหรับ NoSQL Data Stores (OGM)
  • Annotation-based Validations สำหรับ Domain Model
  • Full-Text Search สำหรับ Domain Model

10. Apache HTTPComponents

HTTP เป็น Application-Layer Protocol ที่ใช้งานกันอย่างแพร่หลายและพบได้บ่อยมาก Java Standard Library ไม่สามารถจัดการกับ HTTP ได้มากนัก แต่โชคดีที่ Apache HTTPComponents มีชุดเครื่องมือของ Java Components ที่มุ่งเน้นไปที่ HTTP และ Protocols ที่เกี่ยวข้อง อีกทั้ง Apache HTTPComponents ยังมีความเป็น Modular อย่างมากโดยมี Core Module ในการพัฒนา Client/Server HTTP Services ที่สามารถกำหนดได้เอง นอกจากนี้ยังมี Module ที่มีประโยชน์สำหรับ Function การใช้งานขั้น Advance อย่าง Asynchronous HTTP Client อีกด้วย

Features หลัก ก็คือ:

  • Low-Level HTTP Transport Components สำหรับ Client/Server Services
  • มีทั้ง Blocking และ Non-Blocking I/O Models
  • Synchronous HTTP Client สำหรับ Client-Side Authentication, State Management และ Connection Management
  • Asynchronous HTTP Client เพื่อจัดการกับ Concurrent Connections ที่มีจำนวนมาก

ที่มา:  https://towardsdatascience.com/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความล่าสุด