วันนี้ทำการ review code นิดหน่อย
พบ code ที่น่าสนใจเยอะพอสมควร
หนึ่งในนั้นคือ code เกี่ยวกับการ mapping error code
โดยมีขั้นตอนดังนี้

  1. ทำการตรวจสอบว่า Exception แต่ละตัวจากนั้นกำหนด error code ให้
  2. ทำการดึงรายละเอียดของ error ด้วย error code จาก Database !!

ปล. ดึงข้อมูลจาก database ไม่ค่อยดีนะ !!

โดย code ที่ทำการ review เป็นประมาณนี้

คำถามที่น่าสนใจคือ
จะปรับปรุง 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 นั่นเอง
ดังนี้

จากนั้น Subclass ก็ทำการ extends ไปดังนี้

จะเห็นได้ว่า
ในแต่ละ class จะทำการกำหนด Error code ไว้เลย
ดังนั้นถ้าต้องการเพิ่ม Exception/Error ใหม่ ๆ
ก็เพียงสร้าง class exception ที่มีชื่อตรงตามกับ business case ขึ้นมา

ส่วนในการ mapping Exception/Error ก็ได้หายไปเรียบร้อย
เหลือเพียง code ดังนี้

เพียงเท่านี้ก็ปรับปรุง code ให้ดีขึ้นกว่าเดิมได้แล้วครับ (Continuous Improvement)

แน่นอนว่า มีอีกหลายวิธีการในการปรับปรุง code ชุดนี้
ประเด็นหลักคือ ปัญหาคืออะไร
แล้วชุดคำถามเป็นอย่างไร

ขอให้สนุกกับการเขียน code ครับ
และอย่าลืมเขียน test ด้วยละ