Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

บันทึกการปรับปรุง code เกี่ยวกับการ mapping error code

$
0
0

วันนี้ทำการ review code นิดหน่อย พบ code ที่น่าสนใจเยอะพอสมควร หนึ่งในนั้นคือ code เกี่ยวกับการ mapping error code โดยมีขั้นตอนดังนี้
  1. ทำการตรวจสอบว่า Exception แต่ละตัวจากนั้นกำหนด error code ให้
  2. ทำการดึงรายละเอียดของ 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 ด้วยละ

Viewing all articles
Browse latest Browse all 1997

Trending Articles