![]()
![]()
วันนี้ทำการ review code นิดหน่อย
พบ code ที่น่าสนใจเยอะพอสมควร
หนึ่งในนั้นคือ code เกี่ยวกับการ mapping error code
โดยมีขั้นตอนดังนี้
- ทำการตรวจสอบว่า Exception แต่ละตัวจากนั้นกำหนด error code ให้
- ทำการดึงรายละเอียดของ error ด้วย error code จาก Database !!
ปล. ดึงข้อมูลจาก database ไม่ค่อยดีนะ !!
โดย code ที่ทำการ review เป็นประมาณนี้
[gist id="d300141a8617d13f1d8fbb8e21e16150" file="MappingException01.java"]
คำถามที่น่าสนใจคือ
จะปรับปรุง code ชุดนี้อย่างไรดี ?
แต่ก่อนที่ปรับปรุง code นั้นสิ่งที่ควรจะต้องรู้ก็คือ ปัญหา
เนื่องจากถ้าเรามองไม่เห็นปัญหาแล้ว
การปรับปรุงก็จะไร้ทิศทางอย่างมาก
ดังนั้นการปรับปรุง code อยู่ที่ปัญหานี่แหละ
จาก code ดังกล่าวผมถามคำถามไปยังทีมพัฒนาดังนี้
ทำไมเราต้องทำการตรวจสอบด้วยว่า
Exception/Error นั้นเป็นชนิดอะไร ?
จึงจะกำหนด error code ให้
จากนั้นจึงทำการดึงรายละเอียดจาก Database !!!
ที่สำคัญคือ จะมี Exception/Error เพิ่มขึ้นมาอีกหรือไม่ ?
ตอบเลยว่ามาก ๆๆๆ
แสดงว่าต้องมาเพิ่มการตรวจสอบไปเรื่อย ๆ
มันไม่น่าจะเป็นทางเลือกที่ดีหรือเหมาะสมเท่าไรนัก
นี่คือปัญหาที่ได้รับจากคำถามต่าง ๆ
ดังนั้นลองมาปรับปรุง code กันดูนิดหน่อย
เป้าหมายในการปรับปรุง code คือ ไม่มีการตรวจสอบ Exception/Error นั่นเอง
มาเริ่มกันเลย
เริ่มด้วยการกำหนด Base class ของ Exception ขึ้นมาชื่อว่า BaseException
โดยเป็น abstract class และมี abstract method ชื่อว่า getErrorCode()
เพื่อกำหนดว่า Subclass ต้องมี method นี้เสมอ
เพื่อกำหนด error code ของแต่ละ Exception นั่นเอง
ดังนี้
[gist id="d300141a8617d13f1d8fbb8e21e16150" file="BaseException.java"]
จากนั้น Subclass ก็ทำการ extends ไปดังนี้
[gist id="d300141a8617d13f1d8fbb8e21e16150" file="Subclass.java"]
จะเห็นได้ว่า
ในแต่ละ class จะทำการกำหนด Error code ไว้เลย
ดังนั้นถ้าต้องการเพิ่ม Exception/Error ใหม่ ๆ
ก็เพียงสร้าง class exception ที่มีชื่อตรงตามกับ business case ขึ้นมา
ส่วนในการ mapping Exception/Error ก็ได้หายไปเรียบร้อย
เหลือเพียง code ดังนี้
[gist id="d300141a8617d13f1d8fbb8e21e16150" file="MappingException02.java"]
เพียงเท่านี้ก็ปรับปรุง code ให้ดีขึ้นกว่าเดิมได้แล้วครับ (Continuous Improvement)
แน่นอนว่า มีอีกหลายวิธีการในการปรับปรุง code ชุดนี้
ประเด็นหลักคือ ปัญหาคืออะไร
แล้วชุดคำถามเป็นอย่างไร
ขอให้สนุกกับการเขียน code ครับ
และอย่าลืมเขียน test ด้วยละ