จากหนังสือ Monolith to Microservices นั้น
มีเรื่องเล็ก ๆ อธิบายเรื่อง Reuse ? หรือแปลว่า การใช้ซำ้
เราใช้ซ้ำเมื่อใด และเมื่อใดเราถึงใช้ซ้ำ
และเราสร้างส่วนที่ใช้ซ้ำตอนไหน ?
การ reuse อาจจะเป็นเป้าหมายหลัก ๆ ของการนำแนวคิด Microservices มาใช้งาน
เพื่อแยกส่วนงานต่าง ๆ ออกจากกัน
โดยในหนังสือบอกว่า ไม่เห็นด้วยกับเป้าหมายนี้
แต่ควรให้การ reuse เป็นสิ่งสำคัญรองลงมา หรือ เป็นผลพลอยได้มากกว่า
การ reuse นั้น เกิดจากความเชื่อ ความหวังที่ว่า
เราจะพัฒนาระบบงานได้เร็วขึ้น ง่ายขึ้น ส่งมอบเร็วขึ้น มีค่าใช้จ่ายน้อยลง
แต่มันจริงหรือเปล่านะ ?
เป็นสิ่งที่ต้องลงไปในรายละเอียดกันอีกที
ลองกลับมาที่เป้าหมายกันก่อน
เราต้องพัฒนาระบบงานได้เร็วขึ้น ง่ายขึ้น ส่งมอบเร็วขึ้น มีค่าใช้จ่ายน้อยลง
นั่นคือ เราต้องพยายามปรับปรุงขั้นตอนการพัฒนาให้ดี
ด้วยการทำงานให้น้อยลง
เขียน code ให้น้อยลง
นั่นคือ reuse ให้มากขึ้น ใช่ไหม ?
มาดูตัวอย่างของการ reuse กันบ้าง
ในกรณีที่เรามี Customer service เพื่อจัดการเกี่ยวกับ customer
ซึ่งต้องการสร้าง report ในรูปแบบของ PDF
แน่นอนว่าในระบบงานของเราก็มี Report service ให้ใช้งานอยู่แล้ว
เพียงแค่เราต้องไปติดต่อทีมที่ดูและ Report team
เพื่อให้สร้าง report ตามที่เราต้องการเท่านั้นเอง
ปัญหาที่มักตามมาคืออะไร ?
Customer service นั้นจะต้องยก logic ของการออก report ไปให้ Report service
ดังนั้น ถ้าจะทำอะไร ก็ต้องติดต่อและพูดคุยกับทีม Report service เสมอ
ที่น่าสนใจคือ
ใคร ๆ ก็ใช้ Report service
ดังนั้นตารางงานของทีมนี้ก็ยุ่ง
ไม่ค่อยเป็นไปตาม timeline ของ Customer service
มันคือปัญหาของ coordination กันไหมนะ ?
มันทำให้เราพัฒนาและส่งมอบงานได้เร็วจริงตามเป้าหมายหรือไม่นะ ?
ลดค่าใช้จ่ายจริง ๆ ไหมนะ
ทั้งเวลาติดต่อ
ทั้งเวลาที่รอ
ทั้งเวลาที่ integrate กัน
ทั้งการแก้ไข ที่กระทบไหมนะ
มันคือค่าใช้จ่ายที่สูงทั้งหมดไหมนะ
แทนที่จะเอาเวลาไปใช้กับการพัฒนาและเปลี่ยนแปลง
แต่ต้องมาเสียเวลาในการพูดคุยและวางแผนระหว่างทีม
มันตรงตามเป้าหมายหรือไม่นะ ?
ตรงนี้น่าคิดมาก ๆ
ดังนั้นถ้าเรากำลังสนใจเรื่องของการพัฒนาและส่งมอบที่รวดเร็วขึ้น
น่าจะเอางานส่วนของ PDF report มาทำเองใน Customer service เลยดีไหม
แต่ถ้าสนใจเรื่องของ reuse ก็เอาไปไว้ใน Report service เช่นเดิม !!
ยิ่งระบบงานที่ซับซ้อน การจัดการสิ่งเหล่านี้ยิ่งยากลำบาก
ดังนั้น เราควรตั้งเป้าหมายที่แท้จริงก่อนว่า
เรากำลังจะทำอะไร
มีเป้าหมายอะไร
จากนั้นจึงค่อยเลือกวิธีการ
บางครั้ง reuse มันก็ไม่ใช่คำตามเดียวที่ถูกต้องเสมอไป
อ้างอิงจาก SOA Manifesto ก็น่าสนใจ