Screen Shot 2558-09-21 at 10.08.45 PM
จากบทความเรื่อง  Better Java
ทำการสรุปรูปแบบการเขียน code ในภาษา Java แบบสมัยใหม่
ซึ่ง share มาจากกลุ่ม THJUG อ่านแล้วน่าสนใจมาก ๆ
จึงนำมาแปลบางหัวข้อ เริ่มกันเลย

Screen Shot 2558-09-21 at 2.49.02 PM

สาเหตุหลัก ๆ คือ การเปลี่ยนแปลงครั้งยิ่งใหญ่ของ Java 8 นั่นเอง
ดังนั้นรูปแบบการเขียนก็น่าจะปรับปรุงให้ดีขึ้นกว่าเดิม
ซึ่งมีคำแนะนำที่น่าสนใจ ดังต่อไปนี้

1. ถ้าการเขียนในรูปแบบ JavaBean หรือ Getter/Setter มันยาวไป ก็ลดซะ

code อะไรที่มันไม่จำเป็น ก็ไม่ต้องมี หรือ สร้างมาก็ได้นะ
ด้วยรูปแบบจากภาษา C กับการใช้งาน immutable
มันก็ทำให้ code สั้น และ ลดขยะไปได้เยอะนะ

หรือสามารถใช้ Lombok library มาช่วยก็ได้นะ

2. ใช้ Builder pattern สำหรับการสร้าง object ที่มีความซับซ้อน

หรือเรียกว่า Method chaining หรือ Train Wreck pattern
ปกติผมชอบใช้รูปแบบนี้ในฝั่งของ unit testing มากกว่า
เพื่อใช้สร้างข้อมูลที่ต้องการทดสอบนั่นเอง

หรือใน production code ก็ใช้ได้
โดยรูปแบบที่ชอบใช้กันเช่น การส่ง email

ซึ่งเราสามารถกำหนดค่าต่าง ๆ ที่จำเป็นต่อการส่ง email เช่น

  • Sender
  • TO
  • CC
  • BCC
  • Subject
  • Body

ซึ่งไม่จำเป็นต้องเรียกตามลำดับ
และถ้าไม่ใส่ค่าใดค่าหนึ่ง ก็จะไม่เกิดข้อผิดพลาดขึ้นด้วย
ไม่เช่นนั้นสร้าง constructor หรือ creation method ขึ้นมาใช้งานดีกว่านะ
หรือใช้ร่วมกันก็ได้

ตัวอย่าง code

3. เปลี่ยนมาใช้ Uncheck exception แทน Checked exception กันเถอะ

นั่นคือ หันมาใช้พวก RuntimeException กันดีกว่า
สำหรับการทำงานภายในของระบบ
เพื่อลดความวุ่นวายของ code ไม่ต้องมา throws Exception กันบ่อย ๆ
นั่นคือ ทำให้ code อ่านง่าย สบายตาขึ้น
ดักจับ exception เท่าที่ต้องการ น่าจะเป็นแนวทางที่ดีกว่า

ส่วนการเลือกใช้งานก็ตามความเหมาะสม
ปกติที่ใช้งาน คือ

  • สำหรับการใช้งานภายในใช้ Unchecked exception
  • สำหรับการใช้งานภายนอกใช้ Checked exception

ผมเคยเขียนสรุปไว้ที่ Checked vs Unchecked Exception

4. เรื่องของ Dependency Injection (DI)

ในปัจจุบันเรื่องของ Dependency Injection (DI) ได้รับการพูดถึงอย่างมาก
เนื่องจากมันทำให้ code ของเราทดสอบได้ง่าย
รวมทั้งทำให้ code มันไม่ผูกมัดกันมากอีกด้วย
ดังนั้นควรศึกษาพื้นฐานของมันก่อนนะ

ก่อนที่จะไปใช้พวก framework หรือ library ต่าง ๆ เช่น

  • Spring Framework
  • Dagger
  • Google Guice

5. ลด ละ เลิก พวก Utility class/method ที่มันยาว ๆ เยอะ ๆ ซะ

มันเหมือนจะดีนะ เพราะว่า อะไรก็ตามที่เรียกว่า Utility class/method
มันเกิดมาเพื่อการ reuse !!
ซึ่งเราพบว่ามันจะเยอะมาก ยาวมาก จนงงไปหมด

6. Library สำหรับการทดสอบในภาษา Java

  • jUnit
  • jMock ส่วนตัวชอบตัวนี้มาก ๆ เนื่องจากมันอนุญาตให้เรา mock ได้เฉพาะ interface เท่านั้น
  • อีกตัวที่ขอแนะนำคือ Mockito มันทำได้ทุกอย่างจริง ๆ
  • ส่วน AssertJ ไม่เคยใช้ แต่ที่เคยใช้และแนะนำเพิ่มคือ Hamcrest

7. วิธีการเขียนใหม่ ๆ ที่มากับ Java 8

ยังมีเรื่องอื่น ๆ อีกนะ อ่านเพิ่มได้ที่นี่เลย Better Java

มาปรับปรุงรูปแบบการเขียน code ภาษา Java กันเถอะครับ

Tags:,