Avoid reusing data structure

Chris
Taskworld Tech
Published in
1 min readDec 11, 2017

ย้อนกลับมาคิด คือที่ผมมักชอบบอกว่าคิดดีๆ ก่อน Abstract โค้ด เพราะที่ผ่านมาผมทำร้ายตัวเองด้วยการ Reuse ของที่ไม่ควร Reuse บ่อยกว่าทำร้ายตัวเองด้วยการเขียนโค้ดซ้ำไปทั่ว

แล้วจังหวะที่เจ็บเพราะโค้ดซ้ำ มันเจ็บไม่เท่า Abstract โค้ดผิดแล้วต้องรื้อทิ้ง อันนี้โหดร้ายมากๆ

แต่สิ่งนึงที่เรียนหนักมากคือ Data structure เนี่ย อย่าพยายาม Reuse มากเกินไป เรามักจะมีหล่มนี้

เช่น ถ้าฟอร์มนึงต้องการแค่ Firstname, Lastname และ Avatar เพื่อเขียนข้อมูล User เล็กๆ ว่าเขาเป็นใคร สิ่งที่ดีที่สุดคือการส่งไปแค่นั้นจริงๆ ไม่ใช่ส่ง User Object ไปทั้งก้อน

เพราะอะไรถึงควรส่ง Data structure ที่ minimal แบบนั้นเสมอ คือถ้าเราส่ง User Object ทั้งก้อน ส่วนมากแล้วพอฟอร์มตรงนั้นต้องการอะไรเพิ่มเติม (เช่น Link website) Intuition แรกของเราก็คือ “ก็เพิ่มลงใน User object สิ”

ซึ่งลองนึกดูว่าถ้าเราส่ง User object ไปหลายๆ ที่ทั่วทั้งแอพ แล้วแต่ละส่วนของ UI เติบโตต่างกันมี Requirement changes แตกต่างกัน แปลว่าการเติบโตทั้งหมดที่ไปคนละทิศคนละทางจะมา Reflect ลง User object หมดเลย แล้วถ้าเป็นแบบนี้ สุดท้าย Model เราจะบวมมากๆ กลายเป็น Super class

แต่ถ้าเราส่ง Minimal data structure เราจะเริ่มคิดละว่า เห้ย เราต้องเติมลงตรง Data structure เล็กๆ ตัวนั้นตัวเดียวเองนี่ แล้วมันอาจจะ Map มาจาก Model หลายๆ ตัวได้ รวมถึงคิดว่าจำเป็นต้องสร้าง Model ใหม่มั้ย เราจะพิจารณาความเป็นไปได้ในการเติมของในที่อื่นๆ อย่างเป็นกลางมากขึ้น

ทำได้สองอย่างคือ

1. ส่งให้เล็ก แต่เขียนโค้ดเยอะขึ้นมากๆ ยิ่งถ้า Static type language คือต้องประกาศ Class/Struct เยอะแยะไปหมดเลยเพื่อให้มี Data structure ที่พอดีใช้ ก็มีความน่ารำคาญนะ ผมก็เป็น

2. ส่งใหญ่ก็ได้ แต่ต้องเท่าทัน Intuition ของตัวเองเวลาคิดว่าต้องเติมของลง User object ต้องแบบ จริงเหรอวะใช่เหรอวะบ่อยๆ ถามตัวเองเยอะๆ เท่าทันว่าเราสร้าง Bias ให้ตัวเองตั้งแต่แรก

การ Reuse data structure ผิดที่ผิดทางแล้วสร้าง Data structure ตัวนึงที่ถูกใช้หลายที่เกินไป จนมันเริ่มเติบโตพร้อม Requirement changes ทุกทิศทาง นี่คือแบบ สุดยอดของความยากที่จะแก้ไขมากๆ เจ็บหนักมาก

และเป็นสิ่งที่ต้องระวังเพราะเป็นหล่มที่ตกลงไปได้ง่ายเหลือเกิน

--

--

Chris
Taskworld Tech

I am a product builder who specializes in programming. Strongly believe in humanist.